Webtechnologien Wintersemester 2024

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.

Mockup

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.

Mockup

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, Wetter­infor­ma­tio­nen über einen Ort zu erfahren.

Mockup

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:


  1. 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 per require_once 'config.php'; ein. 

  2. 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).