Anmeldung zum Schulfest
AFB I–IIFür das Schulfest können sich Klassen online für einen Stand anmelden. Nach dem Absenden des Formulars ruft der Browser die folgende Adresse auf. Auf dem Server liegt das Skript anmeldung.php:
<?php $name = $_GET['name']; $stand = $_GET['stand']; echo "<h2>Danke, $name!</h2>"; echo '<p>Dein Stand: ' . $stand . '</p>'; ?>
- Gib das HTML an, das beim Browser ankommt.
- Stelle mithilfe der Abbildung in der richtigen Reihenfolge dar, was zwischen dem Absenden des Formulars und der Anzeige der Seite passiert.
- Emil klickt im Browser auf „Seitenquelltext anzeigen“. Begründe, warum er dort weder
$namenochechofindet.
Hinweise
Hinweis zu Aufgabe a)
echo-Zeile auf die Anführungszeichen und den Punkt.Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
<h2>Danke, Emil!</h2><p>Dein Stand: Waffeln</p>
In der ersten Zeile ersetzt PHP $name in den doppelten Anführungszeichen durch „Emil“. In der zweiten Zeile wird mit dem Punkt verkettet, deshalb ist die Variable außerhalb der einfachen Anführungszeichen und wird ebenfalls eingesetzt.
Erwartungshorizont zu Aufgabe b)
1. Der Browser schickt eine Anfrage nach anmeldung.php an den Webserver; die Werte stehen in der Adresse. 2. Der Server erkennt die PHP-Datei und startet den PHP-Interpreter. 3. PHP liest mit $_GET['name'] und $_GET['stand'] die Werte „Emil“ und „Waffeln“. 4. Die echo-Befehle erzeugen HTML. 5. Der Server schickt dieses HTML als Antwort zurück. 6. Der Browser stellt es dar.
Erwartungshorizont zu Aufgabe c)
PHP läuft serverseitig: Der Interpreter führt das Skript auf dem Server aus, und nur die Ausgabe der echo-Befehle — fertiges HTML — wird verschickt. Der Seitenquelltext im Browser zeigt genau dieses HTML. Der PHP-Code selbst verlässt den Server nie.
Das Erdkunde-Quiz
AFB II–IIIDie Erdkunde-AG baut ein Online-Quiz. Auf der Seite steht die Frage „Wie heißt die Hauptstadt von Frankreich?“ und ein Formular, das die Antwort mit der Methode POST an quiz.php schickt. Lina hatte zuerst eine reine JavaScript-Lösung gebaut: Dort stand die richtige Antwort im Skript der Seite, und der Browser verglich selbst. Jetzt nutzt die AG dieses PHP-Skript:
<?php
$antwort = $_POST['antwort'];
$punkte = 0;
if ($antwort == "Paris") {
$punkte = $punkte + 10;
}
echo "<p>Deine Antwort: $antwort</p>";
echo "<p>Punkte: " . $punkte . "</p>";
?>- Vergleiche Linas JavaScript-Lösung mit der PHP-Lösung. Gehe darauf ein, wo die Antwort geprüft wird und wer die richtige Lösung sehen kann.
- Untersuche, welches HTML das Skript für die Eingaben „Paris“, „paris“ und „ Paris“ (mit Leerzeichen am Anfang) erzeugt.
- Tom gibt als Antwort
<h1>Hallo</h1>ein. Entwickle eine Erklärung, was dann im Browser passiert, und einen Vorschlag, wie man das Problem verhindern kann. - Ein Mitschüler behauptet: „PHP ist überflüssig, man kann heute alles mit JavaScript im Browser machen.“ Nimm begründet Stellung.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
== achtet auf jedes Zeichen, auch auf Groß- und Kleinschreibung.Hinweis zu Aufgabe c)
htmlspecialchars().Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
JavaScript-Lösung: Die Prüfung läuft clientseitig im Browser; die richtige Antwort steckt im Seitenquelltext und kann von jedem gelesen werden. Punkte kann der Besucher sogar selbst verändern. PHP-Lösung: Die Prüfung läuft serverseitig; der Browser schickt nur die Antwort und erhält nur das Ergebnis. Die Lösung „Paris“ steht nie im gesendeten HTML. Nachteil: Für jede Prüfung ist eine Anfrage an den Server nötig.
Erwartungshorizont zu Aufgabe b)
„Paris“: <p>Deine Antwort: Paris</p><p>Punkte: 10</p>. „paris“ und „ Paris“: Die Bedingung ist falsch, weil sich die Zeichenketten unterscheiden (kleines p bzw. zusätzliches Leerzeichen) — Ausgabe jeweils mit Punkte: 0. Das Quiz ist also sehr streng; eine richtige Antwort wird als falsch gewertet.
Erwartungshorizont zu Aufgabe c)
PHP baut die Eingabe unverändert in echo "<p>Deine Antwort: $antwort</p>" ein. Der Browser erhält also echtes HTML mit einer <h1>-Überschrift und stellt „Hallo“ groß dar. Auf diese Weise könnte jemand auch Skripte einschleusen. Abhilfe: Eingaben vor der Ausgabe unschädlich machen, z. B. $antwort = htmlspecialchars($_POST['antwort']); — dann wird < als Zeichen angezeigt und nicht als Tag gedeutet. Grundsatz: Eingaben von Besuchern nie ungeprüft ausgeben.
Erwartungshorizont zu Aufgabe d)
Pro JavaScript: Viele Dinge (Animationen, Sofort-Prüfungen, Spiele) laufen im Browser schneller, ohne Anfrage an den Server. Contra: Geheime Daten (Lösungen, Passwörter) und Daten, die für alle gemeinsam gespeichert werden (Forum, Highscore), brauchen einen Server; Code im Browser kann jeder lesen und verändern. Serverseitig muss es nicht PHP sein, aber PHP ist verbreitet (z. B. WordPress). Begründetes Fazit: Die Aussage ist falsch; moderne Websites kombinieren clientseitiges JavaScript mit serverseitigem Code.
