Serverseitige Skripte
IT 12.6 – Webanwendungen · Einheit 9 · Café-App Schritt 9
Lernziele
Abschnitt betitelt „Lernziele“- Du kannst beschreiben, wie ein Webserver ein PHP-Skript ausführt und was der Browser zurückbekommt.
- Du kannst einfache PHP-Skripte lesen, kommentieren und das erzeugte HTML angeben.
- Du kannst erklären, wie ein Skript Formulardaten auswertet und warum der Server sie noch einmal prüft.
- Du kannst begründen, welche Aufgaben in den Browser und welche auf den Server gehören.
- Du kannst erläutern, warum Ausgaben mit
htmlspecialcharsgeschützt werden.
Rückblick
Abschnitt betitelt „Rückblick“1. Was macht JSON.stringify?
Es wandelt ein JavaScript-Objekt in JSON-Text um, zum Beispiel um es zu speichern oder zu verschicken (Einheit 8).
2. Warum funktioniert fetch nicht, wenn man die HTML-Datei per Doppelklick öffnet?
Dann läuft die Seite über file:/// und nicht über einen Webserver. Browser blockieren das Nachladen von lokalen Dateien (Einheit 8).
3. Warum reicht es nicht, ein Formular nur im Browser zu prüfen?
Alles, was im Browser passiert, lässt sich umgehen oder abschalten. Zuverlässig prüfen kann nur der Server (Einheit 6).
Ein Café, viele Browser
Abschnitt betitelt „Ein Café, viele Browser“Lisa aus der 11FO bestellt in der ersten Stunde auf ihrem Handy einen Kakao. Die Café-App aus den letzten Einheiten prüft die Bestellung und zeigt „Danke, Lisa!“. Am Tresen schaut das Café-Team in der Pause auf sein Tablet, aber dort steht keine Bestellung.
Das JavaScript der Café-App läuft in Lisas Browser. Die Bestellung bleibt auf ihrem Handy. Das Tablet des Teams hat eine eigene Kopie der App und weiß nichts davon.
Überlege: Wo muss das Programm laufen, das die Bestellungen aller Schülerinnen und Schüler sammelt? Und wer sollte dort den Preis ausrechnen?
Erkunden: Ein Blick in den Server
Abschnitt betitelt „Erkunden: Ein Blick in den Server“Bevor du weiterliest: Bearbeite die Erkundungen. Die Erklärungen weiter unten helfen dir erst danach.
Der Server-Simulator baut einen Browser und den Webserver des Cafés nach (Adresse cafe.example). Auf dem Server liegen Skripte in der Sprache PHP. Unter der Browser-Ansicht siehst du in Reitern, was der Browser schickt, was der Server tut und was er zurückschickt.
Erkundung 1: Die Speisekarte kommt vom Server mittel
Simulation eines Webservers für cafe.example: Alles läuft in deinem Browser, nichts wird übertragen oder gespeichert. Klicke Links an und schicke Formulare ab.
Diese Seite wurde mit Formulardaten (POST) aufgerufen. Beim Neuladen werden die Daten noch einmal gesendet.
Das hat der Browser an den Server geschickt:
Anfrage von Hand ändern und senden
So wie mit den Entwicklerwerkzeugen kann man eine Anfrage beliebig verändern. Der Server muss damit rechnen.
Was der Server bei der letzten Anfrage getan hat:
Das hat der Server zurückgeschickt (Kopfzeilen und HTML):
Cookies, die der Browser für cafe.example gespeichert hat. Er schickt sie bei jeder Anfrage mit.
So sieht es in der Datenbank auf dem Server aus. Nur der Server hat darauf Zugriff.
Diese Adressen hat sich der Browser im Verlauf gemerkt:
a) Öffne den Reiter Antwort. Beschreibe, was der Server zurückgeschickt hat. Findest du darin PHP-Code?
b) Öffne den Reiter Server und vergleiche das Skript speisekarte.php mit der Antwort. Gib an, welche Teile unverändert in der Antwort stehen und welche Teile durch etwas anderes ersetzt wurden.
c) Das Team stellt fest: Die Brezeln sind aus. Vermute zuerst, was sich auf der Speisekarte ändert, wenn die Brezel in der Datenbank als ausverkauft markiert wird. Setze dann im Reiter Datenbank den Haken bei der Brezel und lade die Seite mit ⟳ neu. Nenne die Zeilen im Skript, die für die Änderung sorgen.
d) Suche über das Suchfeld nach schorle. Gib an, wo der Suchbegriff in der Anfrage steht (Reiter Anfrage), und beschreibe, wie er ins Skript gelangt.
Lösung
Erkundung 2: Eine Bestellung kommt an mittel
Simulation eines Webservers für cafe.example: Alles läuft in deinem Browser, nichts wird übertragen oder gespeichert. Klicke Links an und schicke Formulare ab.
Diese Seite wurde mit Formulardaten (POST) aufgerufen. Beim Neuladen werden die Daten noch einmal gesendet.
Das hat der Browser an den Server geschickt:
Anfrage von Hand ändern und senden
So wie mit den Entwicklerwerkzeugen kann man eine Anfrage beliebig verändern. Der Server muss damit rechnen.
Was der Server bei der letzten Anfrage getan hat:
Das hat der Server zurückgeschickt (Kopfzeilen und HTML):
Cookies, die der Browser für cafe.example gespeichert hat. Er schickt sie bei jeder Anfrage mit.
So sieht es in der Datenbank auf dem Server aus. Nur der Server hat darauf Zugriff.
Diese Adressen hat sich der Browser im Verlauf gemerkt:
a) Fülle das Formular aus und schicke es ab. Beschreibe, was sich im Reiter Datenbank geändert hat.
b) Lies im Reiter Server nach, was bestellung.php getan hat. Gib an, wo der Preis berechnet wird und woher der Server den Preis des Produkts nimmt.
c) Öffne im Reiter Anfrage den Bereich „Anfrage von Hand ändern und senden“. Ändere in der letzten Zeile anzahl=1 in anzahl=99 und sende die Anfrage. Beschreibe die Antwort des Servers.
d) Das Formular in bestellen.html erlaubt mit min="1" max="5" ohnehin nur 1 bis 5. Begründe, warum bestellung.php die Anzahl trotzdem noch einmal prüft.
Tipp 1
Zu b): Suche im Skript nach der Zeile mit $summe. Woher kommt $produkt['preis']: aus $_POST oder aus findeProdukt($id)?
Lösung
Was auf dem Server passiert
Abschnitt betitelt „Was auf dem Server passiert“Vergleicht eure Ergebnisse aus Erkundung 1. Bei einem serverseitigen Skript läuft ein Programm auf dem Webserver und erzeugt die Seite erst in dem Moment, in dem sie angefragt wird:
- Der Browser schickt eine Anfrage, zum Beispiel
GET /speisekarte.php. - Der Webserver erkennt an der Endung
.php, dass er die Datei nicht einfach verschicken darf. Er übergibt sie dem PHP-Interpreter, einem Programm, das PHP-Code Zeile für Zeile ausführt. - Das Skript liest Daten aus der Anfrage und aus der Datenbank, rechnet, prüft und gibt mit
echoHTML aus. - Der Webserver schickt nur dieses erzeugte HTML an den Browser.
- Der Browser zeigt die Seite an. Er weiß nicht, dass sie von einem Skript stammt.
PHP (Abkürzung für „PHP: Hypertext Preprocessor“) ist eine verbreitete Sprache für solche Skripte. Andere Webserver nutzen zum Beispiel JavaScript (mit Node.js), Python oder Java. Die Idee ist überall dieselbe.
Weil das Skript bei jedem Aufruf neu läuft, zeigt die Seite immer den aktuellen Stand der Datenbank, für alle Besucherinnen und Besucher gleichzeitig. Das kann JavaScript im Browser allein nicht leisten.
PHP lesen
Abschnitt betitelt „PHP lesen“PHP-Code steht zwischen <?php und ?>. Alles außerhalb davon ist gewöhnliches HTML und wird unverändert ausgegeben. Vieles kennst du schon aus JavaScript:
| PHP | JavaScript | |
|---|---|---|
| Variable | $preis = 1.5; |
let preis = 1.5; |
| Texte verbinden | 'Preis: ' . $preis |
'Preis: ' + preis |
| ausgeben | echo '<p>Hallo</p>'; |
element.innerHTML = '<p>Hallo</p>'; |
| Liste | $zahlen = [3, 5, 8]; |
const zahlen = [3, 5, 8]; |
| Länge einer Liste | count($zahlen) |
zahlen.length |
| Objekt mit Namen | $p = ['name' => 'Tee', 'preis' => 1.0]; |
const p = { name: 'Tee', preis: 1.0 }; |
| Zugriff | $p['name'] |
p.name |
| Schleife über eine Liste | foreach ($liste as $p) { … } |
for (const p of liste) { … } |
| Bedingung | if ($preis > 1) { … } else { … } |
if (preis > 1) { … } else { … } |
| Funktion | function doppelt($x) { return $x * 2; } |
function doppelt(x) { return x * 2; } |
Ein kleines Beispiel, das die Öffnungszeiten der Bibliothek ausgibt:
<?php$zeiten = [ ['tag' => 'Montag', 'von' => '08:00', 'bis' => '14:00'], ['tag' => 'Freitag', 'von' => '08:00', 'bis' => '12:00'],];?><h2>Öffnungszeiten</h2><ul><?phpforeach ($zeiten as $z) { echo '<li>' . $z['tag'] . ': ' . $z['von'] . ' bis ' . $z['bis'] . ' Uhr</li>';}?></ul>Der Browser bekommt:
<h2>Öffnungszeiten</h2><ul><li>Montag: 08:00 bis 14:00 Uhr</li><li>Freitag: 08:00 bis 12:00 Uhr</li></ul>Die Zeilenumbrüche im erzeugten HTML können anders aussehen als im Skript. Für die Anzeige im Browser spielt das keine Rolle.
Formulardaten auf dem Server
Abschnitt betitelt „Formulardaten auf dem Server“Vergleicht eure Ergebnisse aus Erkundung 2. Schickt der Browser ein Formular ab, stehen die Werte im Skript in zwei vorgefertigten Listen:
$_GET['name']: Werte, die an der Adresse hängen (?begriff=schorle)$_POST['name']: Werte, die im Inhalt der Anfrage stehen (Formular mitmethod="post")
Der Schlüssel ist jeweils das name-Attribut des Eingabefelds. Den Unterschied zwischen GET und POST behandelt Einheit 10 genauer.
Ein Skript, das Formulardaten verarbeitet, arbeitet meist in vier Schritten (so auch bestellung.php):
- Lesen:
$anzahl = (int) ($_POST['anzahl'] ?? 0);. Das?? 0setzt einen Ersatzwert, falls das Feld fehlt.(int)macht aus dem Text eine ganze Zahl,trim()entfernt Leerzeichen am Rand. - Prüfen: Alles, was vom Browser kommt, kann verändert sein. Der Server prüft deshalb jeden Wert noch einmal. Bei Fehlern antwortet er mit dem Statuscode 400 („Bad Request“) und speichert nichts.
- Verarbeiten: Wichtige Werte wie den Preis nimmt der Server aus seiner Datenbank, nicht aus der Anfrage. Dann speichert er die Daten.
- Antworten: Er gibt eine Seite mit dem Ergebnis aus, zum Beispiel mit der Abholnummer.
Die Hilfsfunktionen holeProdukte(), findeProdukt() und speichereBestellung() greifen auf die Datenbank zu. Wie das genau geht, gehört zu den fakultativen Inhalten des Kerncurriculums und wird hier nicht behandelt.
Ausgaben schützen
Abschnitt betitelt „Ausgaben schützen“Im Skript speisekarte.php steht htmlspecialchars($begriff). Probiere aus, wozu das gut ist: Suche nach <b>Tee</b>, einmal mit Haken beim Schalter und einmal ohne.
Simulation eines Webservers für cafe.example: Alles läuft in deinem Browser, nichts wird übertragen oder gespeichert. Klicke Links an und schicke Formulare ab.
Diese Seite wurde mit Formulardaten (POST) aufgerufen. Beim Neuladen werden die Daten noch einmal gesendet.
Das hat der Browser an den Server geschickt:
Anfrage von Hand ändern und senden
So wie mit den Entwicklerwerkzeugen kann man eine Anfrage beliebig verändern. Der Server muss damit rechnen.
Was der Server bei der letzten Anfrage getan hat:
Das hat der Server zurückgeschickt (Kopfzeilen und HTML):
Cookies, die der Browser für cafe.example gespeichert hat. Er schickt sie bei jeder Anfrage mit.
So sieht es in der Datenbank auf dem Server aus. Nur der Server hat darauf Zugriff.
Diese Adressen hat sich der Browser im Verlauf gemerkt:
Ohne den Schutz schreibt das Skript den Suchbegriff unverändert in die Seite. Der Browser hält <b> dann für einen echten HTML-Befehl und schreibt „Tee“ fett. Statt <b> könnte jemand genauso gut <script> eingeben. Dann würde fremder JavaScript-Code als Teil der Seite laufen. Dieser Angriff heißt Cross-Site-Scripting (kurz XSS). In der Simulation kann eingeschleuster Code nichts anrichten, weil die Vorschau keine Skripte ausführt.
htmlspecialchars ersetzt die Zeichen <, >, & und die Anführungszeichen durch Ersatzdarstellungen wie < und >. Der Browser zeigt sie als Zeichen an, liest sie aber nicht als HTML.
Browser oder Server?
Abschnitt betitelt „Browser oder Server?“Bei einer Webanwendung arbeiten beide Seiten zusammen. Diese Fragen helfen bei der Entscheidung:
| Gehört auf den Server, wenn … | Gehört in den Browser, wenn … |
|---|---|
| Daten für alle gelten oder dauerhaft gespeichert werden sollen | es nur um die Darstellung oder Bedienung auf diesem Gerät geht |
| etwas geheim bleiben muss (Passwörter, Daten anderer Personen) | eine sofortige Rückmeldung ohne Neuladen gewünscht ist |
| eine Prüfung verbindlich sein muss | eine Prüfung nur hilft (sie wird auf dem Server wiederholt) |
| ein Ergebnis nicht manipuliert werden darf (Preise, Rechte) | die Daten schon im Browser sind und nur anders angezeigt werden |
Manches gehört an beide Stellen: Eine Eingabe prüft der Browser, damit es bequem ist, und der Server, damit es sicher ist.
Einen Webserver mit PHP betreiben
Abschnitt betitelt „Einen Webserver mit PHP betreiben“Ergänzend. Live Server aus Einheit 8 kann kein PHP ausführen. Er verschickt nur Dateien. Für PHP braucht man einen Webserver mit PHP-Interpreter, zum Beispiel Apache oder nginx. Für den eigenen Rechner gibt es fertige Pakete wie XAMPP, das Apache, PHP und eine Datenbank enthält. In diesem Modul nutzen wir den Server-Simulator. Ob ihr im Unterricht zusätzlich mit einem echten PHP-Server arbeitet, entscheidet deine Lehrkraft.
Café-App: Schritt 9
Abschnitt betitelt „Café-App: Schritt 9“Café-App, Schritt 9: Das Formular an den Server anbinden mittel
Das Bestellformular soll seine Daten an das Skript bestellung.php auf dem Server des Cafés schicken. Den Server gibt es nur im Simulator (siehe Erkundung 2). Live Server kann kein PHP ausführen.
- Ergänze im Element
forminbestellen.htmldie Attributeaction="bestellung.php"undmethod="post". Das Attributnovalidatebleibt. - Vergleiche die
name-Attribute deines Formulars mit den Schlüsseln, diebestellung.phpaus$_POSTliest (Simulator in Erkundung 2, Reiter Server). Gib an, welches Feld deines Formulars das Skript nicht auswertet. - Ergänze in
plan.txteinen Abschnitt „Server“. VergleichepruefeBestellunginapp.jsmitbestellung.phpund notiere: Welche Prüfungen gibt es an beiden Stellen? Was erledigt nur der Server? - Entwickle die PHP-Zeilen, mit denen
bestellung.phpauch die Bemerkung liest und prüft (höchstens 200 Zeichen, darf leer sein). Schreibe sie als Kommentar inplan.txt.
Noch verhindert event.preventDefault() in app.js, dass das Formular wirklich abgeschickt wird. Das änderst du in Schritt 10.
Tipp 1
Zu 3: Sieh dir an, was der Browser gar nicht wissen kann oder nicht wissen darf: Ist das Produkt in diesem Moment noch da? Welche Nummer bekommt die Bestellung? Wo wird sie gespeichert?
Tipp 2
Zu 4: Orientiere dich an den Zeilen für $name in bestellung.php. Für die Länge eines Textes gibt es mb_strlen().
Stand nach Schritt 9
Aufgaben
Abschnitt betitelt „Aufgaben“Aufgabe 1: Code lesen – die Hallenbelegung leicht
Auf dem Bildschirm vor der Sporthalle läuft die Seite halle.php:
<?php$belegung = [ ['zeit' => '13:30', 'gruppe' => 'Basketball-AG', 'feld' => 1], ['zeit' => '13:30', 'gruppe' => 'Tischtennis', 'feld' => 2], ['zeit' => '15:00', 'gruppe' => 'frei', 'feld' => 1],];$feld = (int) ($_GET['feld'] ?? 0);?><h2>Sporthalle heute</h2><ul><?php$anzahl = 0;foreach ($belegung as $b) { if ($feld !== 0 && $b['feld'] !== $feld) { continue; } if ($b['gruppe'] === 'frei') { echo '<li>' . $b['zeit'] . ': Feld ' . $b['feld'] . ' ist frei</li>'; } else { echo '<li>' . $b['zeit'] . ': ' . $b['gruppe'] . '</li>'; } $anzahl++;}?></ul><p><?php echo $anzahl; ?> Einträge</p>a) Gib das HTML an, das der Browser beim Aufruf von halle.php bekommt.
b) Gib das HTML an, das der Browser beim Aufruf von halle.php?feld=1 bekommt.
c) Eine Schülerin lässt sich im Browser den Seitenquelltext anzeigen. Beschreibe, was sie sieht, und begründe, warum sie die Liste $belegung nicht findet.
Lösung
Aufgabe 2: Browser oder Server? leicht
Die Mediathek der Schule bekommt eine Webanwendung. Ordne jede Aufgabe dem Browser (JavaScript), dem Server (PHP) oder beiden zu. Begründe jeweils kurz.
- die Liste speichern, wer welches Buch ausgeliehen hat
- beim Tippen ins Suchfeld passende Titel aus der schon geladenen Liste einblenden
- vor dem Speichern einer Reservierung prüfen, ob das Buch noch frei ist
- einen Hinweis zeigen, sobald man das Feld „Ausweisnummer“ leer verlässt, und die Ausweisnummer vor dem Speichern prüfen
- Mahngebühren berechnen und im Konto der Person eintragen
- zwischen heller und dunkler Darstellung umschalten
- prüfen, ob jemand zur Mediathek-Leitung gehört, bevor ein Buch gelöscht wird
Lösung
Aufgabe 3: Ein Skript kommentieren mittel
Mit diesem Skript reservieren Lehrkräfte Räume für Veranstaltungen. Das Formular schickt raum, datum und stunde mit POST.
<?php$raum = trim($_POST['raum'] ?? '');$datum = trim($_POST['datum'] ?? '');$stunde = (int) ($_POST['stunde'] ?? 0);
$raeume = ['Aula', 'Mensa', 'Raum 012'];if (!in_array($raum, $raeume, true) || $stunde < 1 || $stunde > 10) { http_response_code(400); echo '<p>Diese Reservierung ist nicht möglich.</p>'; exit;}
if (istBelegt($raum, $datum, $stunde)) { echo '<p>' . $raum . ' ist in der ' . $stunde . '. Stunde schon belegt.</p>';} else { speichereReservierung($raum, $datum, $stunde); echo '<p>Reserviert: ' . $raum . ', ' . htmlspecialchars($datum) . ', ' . $stunde . '. Stunde</p>';}?>in_array($wert, $liste, true) liefert true, wenn der Wert in der Liste vorkommt. istBelegt und speichereReservierung sind Hilfsfunktionen, die auf die Datenbank zugreifen.
a) Ergänze das Skript um sinnvolle Kommentare (// …), die den Ablauf erklären.
b) Beschreibe, was der Browser zurückbekommt, wenn jemand raum=Aula und stunde=12 schickt.
c) Überprüfe, ob das Skript alle Eingaben prüft. Nenne die Lücke und mache einen Vorschlag.
Tipp 1
Zu a): Ein guter Kommentar sagt, wozu ein Abschnitt da ist, nicht nur, was in der Zeile steht. Gliedere nach den vier Schritten Lesen, Prüfen, Verarbeiten, Antworten.
Tipp 2
Zu c): Sieh dir jede der drei Variablen an. Bei welcher steht keine Bedingung im if?
Lösung (Beispiel)
Aufgabe 4: Die Pinnwand der Schülervertretung mittel
Auf der Pinnwand der SV kann jede Person eine Nachricht hinterlassen. Das Skript speichert die Einträge und zeigt sie so allen an:
foreach ($eintraege as $e) { echo '<div class="eintrag"><strong>' . $e['name'] . '</strong>: ' . $e['text'] . '</div>';}a) Jemand trägt als Text <h1>Morgen fällt die Schule aus!</h1> ein. Beschreibe, was alle anderen auf der Pinnwand sehen.
b) Erläutere, warum ein Eintrag mit <script> hier gefährlicher ist als bei der Suche auf der Café-Speisekarte.
c) Gib die verbesserte Zeile an.
d) Jemand schlägt vor: „Wir verbieten einfach das Zeichen < mit einem pattern im Eingabefeld.“ Beurteile den Vorschlag.
Tipp 1
Zu b): Bei der Suche sieht nur die Person das Ergebnis, die selbst sucht. Wer sieht die Einträge der Pinnwand?
Lösung
Zusatzaufgabe 1: Fundsachen melden schwer Zusatz
Im Sekretariat sollen Fundsachen online gemeldet werden. Das Formular schickt mit POST die Felder gegenstand (Text), ort und beschreibung (Text, darf leer sein).
Entwickle das Skript fundsache.php:
gegenstand: nicht leer, höchstens 40 Zeichenort: nurSporthalle,Mensa,SchulhofoderKlassenraumbeschreibung: höchstens 200 Zeichen- Bei Fehlern: Status 400 und alle Fehlermeldungen als Liste. Es wird nichts gespeichert.
- Sonst: Die vorhandene Funktion
speichereFundsache($gegenstand, $ort, $beschreibung)aufrufen. Sie liefert eine Nummer wieF017. Ausgabe: „Danke! Die Fundsache „…“ hat die Nummer F017.“
Tipp 1
Nimm bestellung.php aus Erkundung 2 als Vorbild: erst alle Werte lesen, dann Fehler in einer Liste $fehler sammeln, dann entweder Fehler ausgeben oder speichern.
Tipp 2
Für die Liste der Orte hilft in_array aus Aufgabe 3. Denke bei der Ausgabe an htmlspecialchars.
Lösung (Beispiel)
Zusatzaufgabe 2: Tagesstatistik für das Café-Team schwer Zusatz
Im Team-Bereich soll unter den Bestellungen eine kurze Statistik stehen. $bestellungen ist eine Liste wie in der Tabelle bestellungen aus Erkundung 2, zum Beispiel:
$bestellungen = [ ['nummer' => 'B001', 'produkt' => 'Kakao', 'anzahl' => 2, 'summe' => 3.0, 'pause' => '1'], ['nummer' => 'B002', 'produkt' => 'Brezel', 'anzahl' => 1, 'summe' => 0.9, 'pause' => '2'], ['nummer' => 'B003', 'produkt' => 'Tee', 'anzahl' => 3, 'summe' => 3.0, 'pause' => '1'],];Entwickle PHP-Code, der ausgibt: die Anzahl der Bestellungen, den Gesamtumsatz (mit Komma und €) und wie viele Bestellungen in der 1. und in der 2. Pause abgeholt werden. Gib außerdem das HTML an, das für die Beispieldaten entsteht.
Lösung (Beispiel)
Zusammenfassung
Abschnitt betitelt „Zusammenfassung“- Ein serverseitiges Skript (z. B. in PHP) läuft auf dem Webserver und erzeugt die Seite bei jeder Anfrage neu. Der Browser bekommt nur das erzeugte HTML, nie den Code.
- Ablauf: Anfrage → Webserver erkennt
.php→ PHP-Interpreter führt das Skript aus, liest Daten aus Anfrage und Datenbank → HTML-Antwort. - PHP: Variablen mit
$, Texte mit.verbinden, Ausgabe mitecho, Listen mitforeach, Zugriff mit$p['name']. - Formulardaten stehen in
$_GETbzw.$_POST, Schlüssel ist dasname-Attribut. - Der Server prüft alles noch einmal, rechnet wichtige Werte selbst und antwortet bei Fehlern mit Status 400.
- Ausgaben von außen mit
htmlspecialcharsschützen, sonst droht Cross-Site-Scripting. - Server: gemeinsame, dauerhafte, geheime, verbindliche Dinge. Browser: Darstellung und sofortige Rückmeldung.
Selbstcheck
Abschnitt betitelt „Selbstcheck“Geh die Fragen ehrlich durch. Wenn du bei einer unsicher bist, lies den verlinkten Abschnitt noch einmal oder bearbeite die passende Aufgabe.
- Kannst du beschreiben, wie ein Webserver ein PHP-Skript ausführt? → Erkundung 1, Was auf dem Server passiert, Aufgabe 1
- Kannst du PHP-Skripte lesen, kommentieren und das erzeugte HTML angeben? → PHP lesen, Aufgabe 1, Aufgabe 3
- Kannst du erklären, wie ein Skript Formulardaten auswertet und warum der Server sie prüft? → Erkundung 2, Formulardaten auf dem Server, Café-App, Zusatzaufgabe 1
- Kannst du begründen, was in den Browser und was auf den Server gehört? → Browser oder Server?, Aufgabe 2
- Kannst du erläutern, warum Ausgaben mit
htmlspecialcharsgeschützt werden? → Ausgaben schützen, Aufgabe 4
Wortspeicher
Abschnitt betitelt „Wortspeicher“| Begriff | Bedeutung in einfachen Worten |
|---|---|
| serverseitiges Skript | Programm, das auf dem Webserver läuft und eine Seite erzeugt |
| PHP | verbreitete Sprache für serverseitige Skripte |
| PHP-Interpreter | Programm auf dem Server, das PHP-Code ausführt |
echo |
gibt in PHP Text oder HTML aus, das in die Antwort kommt |
$_GET / $_POST |
Listen mit den Werten aus der Adresse bzw. aus dem Inhalt der Anfrage |
foreach |
Schleife über alle Einträge einer Liste in PHP |
| Statuscode 400 | Antwort „Bad Request“: Die Anfrage enthält ungültige Daten |
htmlspecialchars |
macht aus <, >, & und Anführungszeichen harmlose Zeichen für die Anzeige |
| Cross-Site-Scripting (XSS) | Angriff, bei dem fremder Code über eine Eingabe in eine Seite gelangt |
| Datenbank | Speicher auf dem Server, in dem die Anwendung ihre Daten dauerhaft ablegt |
| XAMPP | Paket mit Webserver, PHP und Datenbank für den eigenen Rechner |
Quellen
Abschnitt betitelt „Quellen“- Hessisches Kultusministerium: Kerncurriculum Fachoberschule, Fachrichtung Technik, Schwerpunkt Informationstechnik, Themenfeld 12.6 Webanwendungen, „Konzepte serverseitiger Skriptsprachen (z. B. Hypertext Preprocessor (PHP))“, „Client/Server-Architektur“, „Formulare: Übertragung und Validierung von Formularinhalten“ (Stand November 2022). Der „Zugriff auf Datenbanken“ ist dort fakultativ und wird hier nicht behandelt.
- PHP-Dokumentation (freie Dokumentation der PHP Group), z. B. htmlspecialchars (Du verlässt jetzt Maternet).
- Texte, Beispiele, Aufgaben, Skripte und der Server-Simulator sind selbst erstellt.
cafe.exampleist eine Beispieladresse nach RFC 2606.