University of Washington, CSE 190 M, Spring 2009
Lab 10: Final Exam Review ANSWER KEY

1. JavaScript/DOM/Prototype

document.observe("dom:loaded", function() {
    var tables = $$("table");
    for (var i = 0; i < tables.length; i++){
        var rows = tables[i].getElementsByTagName("tr");
        for (var j = 0; j < rows.length; j += 2) {
            rows[j].addClassName("zebrastripe");
        }
    }
});

2. Ajax/XML

document.observe("dom:loaded", function() {
    new Ajax.Request("rect.php", {
        method: "GET",
        onSuccess: createRects
    });
});

function createRects(ajax) {
    var rects = ajax.responseXML.getElementsByTagName("rectangle");
    for (var i = 0; i < rects.length; i++) {
        var div = document.createElement("div");
        div.style.position = "absolute";
        div.style.border = "2px solid black";
        div.style.width = rects[i].getAttribute("width") + "px";
        div.style.height = rects[i].getAttribute("height") + "px";
        div.style.left = rects[i].getAttribute("x") + "px";
        div.style.top = rects[i].getAttribute("y") + "px";
        div.style.backgroundColor = "#" + rects[i].getAttribute("color");
        $("rectanglearea").appendChild(div);
    }
}

3. PHP

<?php
header("Content-Type: text/plain");
$search_name = $_REQUEST["name"];
$found = FALSE;

$text = file_get_contents("employees.txt");
$lines = explode("\n", $text);
foreach ($lines as $line) {
    $tokens = preg_split("/\t+/", $line);
    if ($tokens[0] == $search_name) {
        $found = TRUE;
        $title = preg_replace("/[^a-zA-Z]+/", "", $tokens[2]);
        print "http://www.awesomeco.com/$title/{$tokens[1]}";
    }
}

if (!$found) {
    print "http://www.awesomeco.com/";
}
?>

4. SQL

SELECT   a1.first_name, a2.first_name, a2.last_name, m.name
FROM     movies m
JOIN     roles r1 ON r1.movie_id = m.id
JOIN     actors a1 ON a1.id = r1.actor_id
JOIN     roles r2 ON m.id = r2.movie_id
JOIN     actors a2 ON a2.id = r2.actor_id
WHERE    a1.last_name = a2.last_name
AND      a1.first_name < a2.first_name
ORDER BY a2.last_name;

5. PHP+HTML+SQL

function display_last_names() {
    # connect to database
    $db = mysql_connect("localhost", "user", "password");
    mysql_select_db("imdb_small");

    $query = "SELECT   a1.first_name AS first1, a2.first_name AS first2, a2.last_name AS last, m.name AS movie
              FROM     movies m
              JOIN     roles r1 ON r1.movie_id = m.id
              JOIN     actors a1 ON a1.id = r1.actor_id
              JOIN     roles r2 ON m.id = r2.movie_id
              JOIN     actors a2 ON a2.id = r2.actor_id
              WHERE    a1.last_name = a2.last_name
              AND      a1.first_name < a2.first_name
              ORDER BY last;";
    $results = mysql_query($query);
?>
        <ol>
<?php
    $second = FALSE;
    while ($row = mysql_fetch_array($results)) {
        if (!$second && preg_match("/^[K-Z]/", $row["last"])) {
            # end first list and start second
            $second = TRUE;
?>
        </ol>
        <ol>
<?php
        }
?>
            <li><?= $row["last"] ?>, <?= $row["first1"] ?> / <?= $row["first2"] ?>: <?= $row["movie"] ?></li>
<?php
    }
?>
        </ol>
<?php
}