Informatik 13 10. Mai 2007 Klausur in 13.2 Thema: Homepage mit MySQL und PHP (Bearbeitungszeit: 90 Minuten) Name: Nachname, Vorname Hinweis: Speichern Sie regelmäßig Ihre Arbeit in einer Word-Datei mit dem Namen klausur2_Nachname.doc – aber nicht auf dem Desktop! Datenverluste gehen zu Ihren Lasten! 8 VP 1 Sie finden in Ihrem Verzeichnis die folgenden Dateien: description.php – footer.php – format-comenius.css – head.php – index.php - language.php – language-package.php – material.php – methods.php – partners.php - start.php – partners_klausur.csv und qemuNr.sql sowie die Verzeichnisse graph und material mit 16 Grafiken bzw. 292 doc- oder pdf-Dateien. a) Prüfen Sie die Vollständigkeit der Dateien. Wenden Sie sich bei Unvollständigkeit an den Lehrer. b) Kopieren Sie alle Dateien in der vorhandenen Ordnerstruktur in Ihr usr-Verzeichnis des Webservers. c) Importieren Sie die Datenbank qemuNr.sql und testen Sie die Homepage, indem Sie in Ihrem Browser die index-Datei mit folgenden Optionen aufrufen: index.php?language_chosen=0&topic=1 Erklären Sie, was die Parameter language_chosen und topic bewirken. Welche Werte mit jeweils welchen Bedeutungen können Sie annehmen? d) Betrachten Sie die Wirkungen der Menüpunkte material und partners. Erklären Sie die Unterschiede im Aufbau der beiden Dateien. 6 VP 2 a) Legen Sie in der Datenbank qemu zusätzlich zur Tabelle material eine Tabelle partners mit den der Abbildung entsprechenden Feldern, Typen Längen und dem Primärschlüssel inst_nr an. b) Importieren Sie die Inhalte der Datei partners_klausur.csv ab der 2. Zeile über „CSV mit Load Data“. weiter geht’s auf Seite 2… 1 Informatik 13 10. Mai 2007 16 VP 3 Für die Teilaufgaben a) bis c) gilt: Erläutern Sie die von Ihnen durchgeführten Änderungen der Datei partners.php, indem Sie an allen entsprechenden Stellen eine Kommentar-Nr. der Form //NEU1, //NEU2, //NEU3, usw. einfügen und in der Datei klausur2_Nachname.doc erklären. a) Die Daten sollen ähnlich dem Aufbau der Datei material.php direkt aus der Datenbanktabelle partners aus Aufgabe 2 ausgelesen werden. Dabei sollen nach wie vor nur die vier Spaltenüberschriften country, institution, contact persons und internet erscheinen. b) Von der Farbgebung her sollen die ausgegebenen Tabellenzeilen nach jeder Institution zwischen der roten Hintergrundfarbe und weiß wechseln. Sie können dazu den passenden Quelltext aus der Datei material.php nutzen. c) Stellen Sie die Tabellenüberschriften als Button dar, so dass der Tabellenin-halt beim Anklicken eines Buttons alphabetisch aufsteigend nach dem entsprechenden Spalteninhalt sortiert wird. Sie können dazu in der Datei start.php schauen, wie man solche Buttons realisiert. Führen Sie dazu eine Variable $sortieren_nach ein, die je nach Auswahl die Werte der Datenbank-Spaltenüberschriften annehmen kann. d) Stellen Sie die Spaltenüberschriften in der gewählten Landessprache dar. Diese Auswahl muss nur für Englisch und Deutsch funktionieren, in allen anderen Sprachen soll die Überschrift auch in Englisch erscheinen. Führen Sei dazu die Array-Variablen $tab_partners_country, $tab_partners_institution, $tab_partners_contact_persons und $tab_partners_internet in der Datei language-pack.php ein. Viel Erfolg! Aufgabe 1 2 3 Gesamt 8 6 16 30 erreichte Punkte von möglichen Notenschlüssel siehe Erwartungshorizont siehe http://www.hoeger.org/punktesc.html http://www.hoeger.org/I13/06i13_2.pdf Rückgabe am 24. Mai 2007 Notenpunkte: mündlich: 2 Arithmetisches Mittel: Informatik 13 10. Mai 2007 Erwartungshorizont 1 a) b) c) d) 2 a) b) Die Dateien sind vollständig. Alle Dateien kopiert. language_chosen kann die folgenden Werte mit den angegebenen Bedeutungen annehmen: [0] ⇔ 'english'; englisch [1] ⇔ '&ouml;sterreichisch'; österreichisch [2] ⇔ 'ceský'; tschechisch [3] ⇔ 'dansk'; dänisch [4] ⇔ 'deutsch'; deutsch [5] ⇔ 'magyar'; ungarisch [6] ⇔ 'italiano'; italienisch holländisch [7] ⇔ 'nederlands'; [8] ⇔ 'polski'; polnisch [9] ⇔ 'România'; rumänisch [10] ⇔ 'slovensky'; slowenisch [11] ⇔ 'svenska'; schwedisch topic kann die Werte 0 bis 3 annehmen, sie bedeuten: [0] ⇔ 'Beschreibung'; in der jeweiligen Landessprache [1] ⇔ 'Material'; in der jeweiligen Landessprache in der jeweiligen Landessprache [2] ⇔ 'Methoden'; [3] ⇔ 'Partner'; in der jeweiligen Landessprache material zeigt alle Unterrichtsmaterialien in der ausgewählten Sprache sortiert nach Alter der Schülerzielgruppe. Dazu werden die Voreinstellungen über eine Abfrage an eine Datenbank gesendet, die wiederum die entsprechenden Ausgaben macht. Die Seite wird also dynamisch erzeugt. partners ist eine Seite, die alle Projektpartner auflistet. Diese sind jedoch nicht in einer Datenbank abgelegt sonder die Seite ist eine fertige HTML-Seite – sie ist statisch. SQL-Befehl: CREATE TABLE `partners` ( `inst_nr` VARCHAR( 2 ) NOT NULL , `country` VARCHAR( 20 ) NOT NULL , `inst_name` VARCHAR( 30 ) NOT NULL , `inst_subname` VARCHAR( 30 ) NOT NULL , `inst_street` VARCHAR( 30 ) NOT NULL , `inst_city` VARCHAR( 30 ) NOT NULL , `contpers1` VARCHAR( 20 ) NOT NULL , `contpers2` VARCHAR( 20 ) NOT NULL , `contpers3` VARCHAR( 20 ) NOT NULL , `internet` VARCHAR( 30 ) NOT NULL , PRIMARY KEY ( `inst_nr` ) ) ENGINE = MYISAM ; SQL-Befehl: LOAD DATA LOCAL INFILE 'H:\\partners.csv' INTO TABLE `partners` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 1 LINES # Betroffene Datensätze: 12 3 Informatik 13 10. Mai 2007 3 a) und b) //NEU1 Stilvorlagen fuer die Tabelle angeben (20 Zeilen) <style type="text/css"> <!-.tableLine { font-family: Verdana,Arial,sans-serif; font-style: normal; font-size: 9px; BORDER-TOP: #A6A6A6 1px solid; BORDER-LEFT: #A6A6A6 1px solid; BORDER-BOTTOM: #A6A6A6 1px solid; BORDER-RIGHT: #A6A6A6 1px solid; } .row_0 { background-color: #FFFFFF; } .row_1 { background-color: #FFCCAA; } --> </style> //NEU2 Verbindung zum Server herstellen (2 Zeilen) $conn = mysql_connect("servername", "username","passwort") or die(mysql_error()); $db = mysql_select_db("username", $conn) or die(mysql_error()); //NEU3 Abfrage starten (2 Zeilen) $query = "SELECT country, inst_name, inst_subname, inst_street, inst_city, contpers1, contpers2, contpers3, internet FROM partners ORDER BY country ASC, inst_name DESC"; $result = mysql_query($query, $conn) or die(mysql_error()); //NEU4 Tabelle erzeugen (35 Zeilen) ?> <table cellspacing="0" border="0" cellpadding="0"> <tr bgcolor=<?php echo('"'.$topic_color[$_SESSION['topic']].'"'); ?> valign = "top"> <td width=10% align="top" valign="middle" height="30"><b> country</b></td> <td width=35% align="top" valign="middle"><b> institution</b></td> <td width=25% align="top" valign="middle"><b> contact persons</b></td> <td width=30% align="top" valign="middle"><b> internet</b></td> </tr> <?php $i = 0; while($line = mysql_fetch_array($result)) { print("<tr>");?> <?php //Land ausgeben?> <td valign=top class="row_<?PHP echo $i % 2; ?>"> <?php print("$line[0]</td>");?> <?php //Institut ausgeben?> <td valign=top class="row_<?PHP echo $i % 2; ?>"> <?php print("$line[1]");?><br> <?php /*Abteilung falls vorhanden ausgeben*/ if (($line[2])!=''){print("$line[2]<br>");}?> <?php /*Strasse ausgeben*/ print("$line[3]");?><br> <?php /*Stadt ausgeben*/ print("$line[4]</td>");?> <?php //1. Kontaktperson ausgeben?> <td valign=top class="row_<?PHP echo $i % 2; ?>"> <?php print("$line[5]");?><br /> 4 Informatik 13 10. Mai 2007 ?> <?php /*2. Kontaktperson ausgeben*/ print("$line[6]");?><br> <?php /*3. Kontaktperson ausgeben*/ print("$line[7]</td>");?> <?php //Internetadresse ausgeben?> <td valign=top class="row_<?PHP echo $i % 2; ?>"> <a href=http://"<?php print("$line[8]");?>" target="_blank"> <?php print("$line[8]</a></td>"); print("</tr>"); $i++; } Screenshot: 3 c) und d) In die Datei partners.php wird in der Tabellenkopf ersetzt durch: <td width=10% align="top" valign="middle" height="30"><b> <input type="submit" value="<?php echo($tab_partners_country [$_SESSION['language_chosen']])?>"></b></td> <td width=45% align="top" valign="middle" height="30"><b><input type="submit" value="<?php echo($tab_partners_institution [$_SESSION['language_chosen']])?>"></b></td> <td width=20% align="top" valign="middle" height="30"><b><input type="submit" value="<?php echo($tab_partners_contact_persons [$_SESSION['language_chosen']])?>"></b></td> <td width=25% align="top" valign="middle" height="30"><b><input type="submit" value="<?php echo($tab_partners_internet[$_SESSION ['language_chosen']])?>"></b></td> In die Datei language-package.php wird am Ende z.B. eingefügt: for($x = 0; $x < 11; $x++){ $tab_partners_country[$x]='country'; $tab_partners_institution[$x]='institution'; $tab_partners_contact_persons[$x]='contact person(s)'; $tab_partners_internet[$x]='homepage'; } $tab_partners_country[4]='Land'; $tab_partners_institution[4]='Institution'; $tab_partners_contact_persons[4]='Kontakt Person(en)'; $tab_partners_internet[4]='Homepage'; 5