|
PHP und HTML interagieren stark: PHP kann HTML generieren und HTML kann Informationen an PHP weitergeben. Bevor Sie diese FAQ lesen, sollten Sie verstanden haben, wie Sie auf Variablen außerhalb von PHP zugreifen können. Die Manual-Seite zu diesem Thema enthält viele Beispiele, die das Verständnis erleichtern. Besonders wichtig ist weiterhin, zu wissen, was die register_globals-Einstellung für Sie bedeutet.
1. Wie muss ich enkodieren / dekodieren, wenn ich einen Wert über ein Formular / einen URL weitergeben möchte?
Es gibt mehrere Stufen, für die Enkodierung wichtig ist. Angenommen, Sie haben einen String $data, der den String, den Sie in nicht-enkodierter Weise weitergeben möchten, enthält. Dann sind dies die relevanten Stufen:
HTML-Interpretation: Wenn Sie einen zufälligen String angeben wollen, müssen Sie ihn in die doppelte Anführungszeichen einschließen und htmlspecialchars() auf den gesamten Wert anwenden.
URL: Ein URL besteht aus mehreren Teilen. Wenn Sie wollen, dass Ihre Daten als ein Element interpretiert werden, dann müssen Sie Ihre Daten mit urlencode() enkodieren.
Anmerkung: Es wäre falsch, urlencode() auf $data anzuwenden, da es die Aufgabe des Browsers ist, die Daten zu enkodieren. Alle populären Browser machen dies auch korrekt. Beachten Sie, dass dies unabhängig von der verwendeten Methode (also z.B. GET oder POST) geschieht. Feststellen werden Sie dies aber nur bei GET-Anfragen, da POST-Anfragen meist versteckt geschehen.
Anmerkung: Die Daten werden wie Browser wie gewünscht ausgegeben, da der Browser die HTML-escapten Symbole interpretiert.
Nach dem Abschicken, egal ob via GET oder POST, werden die Daten für den Transfer enkodiert (mit urlencode()) und von PHP direkt wieder dekodiert (mit urldecode()). Sie müssen also für die En- und Dekodierung nicht selbst sorgen, die Browser und PHP erledigen dies automatisch für Sie.
Anmerkung: Hier wird eine HTML-GET-Anfrage gefakt, deswegen müssen Sie die Daten manuell mit urlencode() enkodieren.
Anmerkung: Sie müssen htmlspecialchars() auf den gesamten URL anwenden, da der URL als Wert eines HTML-Attributs auftritt. In diesem Fall wird der Browser zuerst etwas wie "un-htmlspecialchars()" auf den Wert anwenden und dann erst den URL weitergeben. PHP wird den URL korrekt verstehen, da Sie die Daten mit urlencode() enkodiert haben.
Sie werden feststellen, dass das & im URL durch & ersetzt wird. Auch wenn die meisten Browser richtig arbeiten, falls Sie diese Ersetzung vergessen sollten, sollten Sie sich trotzdem nicht darauf verlassen. Das bedeutet, dass Sie - auch wenn Ihr URL nicht dynamisch ist - trotzdem htmlspecialchars() auf den URL anwenden müssen.
2. Ich versuche ein <input type="image">-Tag zu benutzen, aber die Variablen $foo.x and $foo.y sind nicht verfügbar. Auch $_GET['foo.x'] existiert nicht. Wo finde ich diese?
Wenn ein Formular abgeschickt werden soll, ist es möglich, ein Bild statt des Standard-Submit-Buttons zu verwenden, indem Sie ein Tag wie das folgende verwenden:
<input type="image" src="image.gif" name="foo" /> |
Da foo.x und foo.y in PHP ungültige Variablennamen erzeugen würden, werden Sie automatisch in $foo_x und $foo_y konvertiert. Die Punkte werden also durch Unterstriche ersetzt. Sie können auf diese Variablen also genauso wie im Abschnitt Variablen außerhalb von PHP zugreifen, z.B. $_GET['foo_x'].
Anmerkung: Leerzeichen in Namen von Formularelementen werden in Unterstriche konvertiert.
Um die Formularwerte als Array im PHP-Skript zur Verfügung zu haben, müssen Sie die <input>, <select> or <textarea>-Felder wie folgt benennen:
<input name="MeinArray[]" /> <input name="MeinArray[]" /> <input name="MeinArray[]" /> <input name="MeinArray[]" /> |
<input name="MeinArray[]" /> <input name="MeinArray[]" /> <input name="MeinAnderesArray[]" /> <input name="MeinAnderesArray[]" /> |
<input name="AnderesArray[]" /> <input name="AnderesArray[]" /> <input name="AnderesArray[email]" /> <input name="AnderesArray[telefon]" /> |
Anmerkung: Die Angabe eines Array-Schlüssels ist in HTML optional. Wenn Sie keinen Schlüssel angeben, wird das Array in der Formular-Reihenfolge gefüllt. Im ersten Beispiel enthält das Array MeinArray also die Schlüssel 0, 1, 2 und 3.
Siehe auch: Array-Funktionen und Variablen außerhalb von PHP.
Mit einem "select multiple"-Tag können Benutzer mehrere Werte aus einer Liste auswählen. Diese Werte werden dann an den "action handler" des Formulars (z.B. ein PHP-Skript) übergeben. Problematisch ist dabei, dass alle mit demselben Namen übergeben werden, z.B.:
<select name="var" multiple="yes"> |
var=option1 var=option2 var=option3 |
<select name="var[]" multiple> |
Beachten Sie, dass, falls Sie JavaScript benutzen, die eckigen Klammern [] im Feldnamen Probleme machen können, wenn Sie versuchen, über den Namen auf das Feld zu verweisen. Benutzen Sie stattdessen die numerische ID des Formularfelds oder schließen Sie den Variablennamen in einfache Anführungszeichen ein und benutzen Sie dies als den Index, z.B.:
variable = documents.forms[0].elements['var[]']; |
Da JavaScript (normalerweise) nur auf dem Client läuft, während PHP (normalerweise) auf Servern läuft, und da HTTP ein "status-loses" Protokoll ist, können zwischen den beiden Sprachen keine Variablen direkt ausgetauscht werden.
Allerdings ist es trotzdem möglich, Variablen zwischen den beiden zu übergeben. Eine Möglichkeit ist, den JavaScript-Code mit PHP zu generieren. Außerdem muss die angezeigte Seite sich regelmäßig selbst aktualisieren und dabei bestimmte Variablen an das PHP-Skript übergeben. Das folgende Beispiel zeigt wie Sie dies tun können -- es ermöglicht PHP, die Bildschirmauflösung (Höhe und Breite) zu ermitteln, was normalerweise nur Client-seitig möglich ist.
<?php |
Zurück | Zum Anfang | Weiter |
PHP benutzen | Nach oben | PHP and COM |
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 17:57:26