4. Aufgabe – PHP, MySQL
Abgabe | 12. Dezember | Punkte | 5 – 6 |
Starthilfe
Es gibt eine Hilfeseite zu PHP mit einem Beispiel zu PHP & Formularen. Unter github.com/HTW-Webtech/Products-MySQL eine Beispielimplementierung der Kernfunktionalität von Splendr. Zudem finden Sie unter github.com/HTW-Webtech/Liebes-Orakel ein kleines Beispielsprojekt aus dem letzten Semester. Aufgabe war es, um Geld zu sparen, den aus Funk und Fernsehen bekannten Dienst: Schick deinen Namen und den deines Schwarms an folgende Nummer und erfahre, wie gut ihr zusammen passt!
, mindestens genauso verlässlich nachzubauen.
Abgabe
Pushen Sie Ihren Code samt SQL-Dump in Ihr Git-Repo und stellen Sie Ihre Lösung über Ihre VM bereit. Sollten Sie eine Datenbank des Studi-Servers verwenden, denken Sie daran, ihr Datenbankpasswort (das auch das Passwort Ihres F4-Accounts ist) nicht zu committen1 oder für MySQL ein anderes Passwort festzulegen.
Aufgaben
Sie haben die Wahl zwischen einer der folgenden Aufgaben:
Differ – 5 Punkte
Entwickeln Sie eine Web-Anwendung, die es ermöglicht, zwei Texte auf Unterschiede zu untersuchen2. Das Ergebnis soll mit einem Titel versehen werden können und unter einer URL zugänglich sein. Zudem soll ein Counter anzeigen, wie oft die Seite bereits aufgerufen wurde.
Die Diff-Funktionalität muss nicht selber entwickelt werden – auf GitHub gibt es schon genug passende Projekte, die Sie nutzen können.
Poller – 6 Punkte
Entwickeln Sie eine Web-Anwendung, die es ermöglicht, Abstimmungen anzulegen und an ihnen teilzunehmen.
Abstimmungen bestehen aus einem Titel und einer Liste an Antwortmöglichkeiten. Nach dem Anlegen ist die Abstimmung über eine nicht zu erratende URL zugänglich. Es kann dann einmal abgestimmt werden, was durch einen Cookie kontrolliert wird. Danach wird unter derselben URL das aktuelle Ergebnis angezeigt, sofern mindestens fünf Ergebnisse vorhanden sind; andernfalls wird ein entsprechender Hinweis ausgegeben. Zudem soll es möglich sein, die aktuellen Ergebnisse als CSV-Datei herunterzuladen. (Ob Einfach- oder Mehrfachauswahl möglich sein soll, ob einmal getroffene Entscheidungen nachträglich geändert werden können usw. obliegt Ihnen. Unter wtfforms.com gibt es kleine Tricks für schönere Formulare.)
Wetter – 6 Punkte
Entwickeln Sie eine Web-Anwendung, die es ermöglicht, Wetterinformationen über einen Ort zu erfahren.
Die dazu benötigten Daten können über die Yahoo Weather API abgerufen werden. Da API-Calls teuer sind, sollen die Daten für einen frei zu wählenden Zeitraum in einer Datenbank gecached werden.
Um den Zugriff auf die API zu erleichtern, kann ein Umweg über YQL genommen werden:
http://query.yahooapis.com/v1/public/yql
?q=<YQL-Statement>
&format=xml
&env=store://datatables.org/alltableswithkeys
Das dazugehörige YQL-Statement hat folgenden Aufbau:
SELECT * FROM weather.bylocation WHERE location="<Stadt>"
Das Statement muss als URL kodiert werden. Sie können Ihre Abfrage unter developer.yahoo.com/yql/console testen (links “Show Community Tables” aktivieren).
PHP stellt für die Aufgabe einige nützliche Funktionen bereit, z.B. file_get_contents
um den Inhalt einer Datei oder von einer URL zu laden und urlencode
zum Enkodieren von URLs.
Um aus der Antwort des Servers ein XML-Objekt zu erstellen, können Sie folgenden Code verwenden:
$xml = new SimpleXMLElement($file_content);
$xml->registerXPathNamespace('yweather', 'http://xml.weather.yahoo.com/ns/rss/1.0');
Die Yahoo-API liefert unter anderem die HTTP-Statuscodes 408
, wenn der Server nicht erreichbar ist und 500
wenn etwas schiefging. (Sie können während der Entwicklung die Kopie einer Beispiel-Antwort lokal speichern und laden lassen.)
Bewertung
Für die volle Punktezahl muss Folgendes erfüllt sein:
- Alle Daten werden auf Validität und Plausibilität geprüft und bereinigt.
- Es wird eine MySQL-Datenbank verwendet und über PDO angebunden.
- Der Code ist ordentlich strukturiert.
-
Sie können die Zugangsdaten in eine eigene Datei, beispielsweise
config.php
auslagern und diese per .gitignore von der Versionskontrolle lösen. Im Code binden Sie die Datei einfach perrequire_once 'config.php';
ein. ↩ -
Da sich einigen der Sinn hinter der Aufgabe nicht erschloss: In der Praxis kommt es häufig vor, dass Sie zwei Versionen eines Textes (Programmcode, Teilnehmerlisten, Entwürfe für wissenschaftliche Journals) haben und schnell erkennen wollen, wo die Unterschiede liegen (um einen Fehler zu finden, Zu- und Absagen zu erkennen oder auf den aktuellen Stand zu kommen). ↩