echo $begrüßung;
Es ist doch schon mal ein Erfolg, wenn der PHP-Code nicht mehr im ausgelieferten Quellcode steht...
Nein, der Test der mit "echo htmlspecialchars($_POST['test']);"
ausgegeben werden soll steht nicht im Quelltext!!!!
Das der PHP-Code nicht im Quelltext steht ist klar!!
Wenn das für dich klar ist, dann ist das ja schön und gut. Warum sollte es aber für andere klar sein, die keinen Einblick in deinen Server haben?
Fang doch mal mit einfachen Dingen an. Gib einen Text aus, der fest im PHP-Code steht:
echo "ein Text";
Was auch immer klappen sollte, und was dir nebenbei noch wertvolle Informationen zur Konfiguration PHPs ausgibt, ist ein
phpinfo();
Dort siehst du (ziemlich weit unten) unter anderen die Werte, die dir durch ein Formular zur Verfügung stehen. Ansonsten gehört es zu den Grundlagen jeder Fehlersuche, sich Kontrollausgaben der beteiligten Werte zu machen. Ein echo reicht für einfache Fälle, doch genauer gibt dir die Funktion var_dump() einen Wert aus. Während ein echo manchmal gar keine Ausgabe erzeugt, was bei null, false oder einem Leerstring der Fall ist, siehst du mit var_dump() immer etwas, da es dir auch den Typ eines Wertes ausgibt. Und immer auch in die Quelltext-Ansicht schauen, denn manchmal unterdrückt der Browser eine Ausgabe, wenn diese wie ein HTML-Tag aussieht.
Wenn du dir nun die Ausgabe von phpinfo() anschaust, so du eine bekommst, prüfe bitte die Werte für display_errors und error_reporting. Das error_reporting sollte beim Entwickeln immer auf E_ALL stehen, damit dir nicht die Hinweise auf Lesezugriffe auf nicht existierende Variablen verschwiegen werden. Durch diese Meldungen offenbaren sich neben Tippfehlern auch Hinweise auf mögliche Angriffsstellen unter Ausnutzung des Features register_globals.
Das PHP-Handbuch hat in seinem Anhang eine Liste aller Konfigurationsdirektiven nebst Verweis auf einen Erläuterungstext. Dort kannst du die eben erwähnten Direktiven finden und dich über sie informieren.
Es wurde ja schon erwähnt, dass ein
$variable = $_POST['variable'];
überflüssig ist. Solche Konstrukte sieht man leider zu Hauf in allerlei Scripten. Der gewünschte Wert steht bereits in $_POST['variable']. Er muss nicht "abgeholt" werden, das hat PHP schon vor dem Script-Start getan und ihn dort bereitgestellt. $variable lässt sich vielleicht im weiteren Verlauf einfacher tippen als $_POST['variable'], doch andererseits sieht ein $variable auch weniger gefährlich aus als ein $_POST['variable']. Wenn du das mit dem Formular zum Laufen bekommen hast, lass doch mal die Funktion htmlspecialchars() weg und gib in das Formular-Eingabefeld ein
<script>alert(42)</script>
ein. Schau dir auch den HTML-Quelltext an. Dann wiederhol den Versuch mit htmlspecialchars(), so wie es Tom notiert hat. Nun dürftest du gesehen haben, was diese Funktion macht, und hoffentlich auch erkannt haben, dass es wichtig ist, sie für alle Ausgaben von Werten in Richtung HTML zu verwenden, besonders jedoch für die Werte, die der Benutzer eingegeben hat, und dass man deswegen diese Benutzereingaben nicht durch Umkopieren in einfache Variablen verschleiern sollte.
Das was für HTML und htmlspecialchars() im Speziellen gilt, lässt sich zu einem Lehrsatz verallgemeinern:
Ausgaben müssen stets und ohne Ausnahme für den jeweiligen Ausgabekontext behandelt werden.
Die häufigsten Kontexte im Webumfeld und darauf spezialisierte Funktionen sind:
- mysql_real_escape_string() für MySQL-Statements
- htmlspecialchars() für HTML
- urlencode() für Werte, die in einer URL transportiert werden sollen. Hier ist zusätzlich noch zu beachten, dass die URL ihrerseits meist noch in einem HTML-Kontext ausgegeben wird, also auch für diesen behandelt werden muss.
Außerdem ist es noch wichtig, das Feature Magic Quotes zu kennen. Auf der verlinkten Seite ist beschrieben, was es macht, wofür es gedacht ist, aber auch was es für Nachteile mit sich bringt, und wie man es deaktivieren kann. Nachdem du den Ausgabewerte-gemäß-Kontext-behandeln-Lehrsatz kennengelernt hast, und ihn hoffentlich überall berücksichtigst, brauchst du dieses Feature nicht mehr.
So, das war das Äquivalent zum Stewardessenballett im Flugzeug. Und nun viel Erfolg bei deinem Einstieg in die PHP-Programmierung.
echo "$verabschiedung $name";