Werbung einblenden Werbung ausblenden


Home / Tutorials / PHP Handbuch / Html Formulare mit PHP auswerten


Html Formulare mit PHP auswerten

Grundsätzliches zu HTML-Formularen siehe Formulare. Der Import von Angaben des Users aus einem HTML Formular ist mit PHP derart einfach, dass er als Problem schon gar nicht mehr erkannt wird. Das ist mit Perl nicht so. In PHP kann man auf die Eingaben des Users einfach durch die Angabe des entsprechenden Namen des Formularfeldes zugreifen. Gab es ein Formularfeld das so aussah:

<input type=text name=Familienname>

Dann kann man den Wert, den der User in dieses Feld eingetragen hat mit $Familienname in den PHP-Skript importieren. Etwas komplizierter wird es bei Formularen, die dem User die Möglichkeit bieten, Dateien direkt aus dem Browser upzuloaden. Also Forumaler diesen Typs.

<html>
<head>
<title> Bild upload direkt aus dem Browser </title>
</head>
<form action=http://127.0.0.1/upload.php
enctype=multipart/form-data method=post>
Wählen Sie eine Datei
<input type=file name=datei>
<input type=submit value=hochladen>
</form>
</body>
</html>

Wir sehen, dass dieses Formular etwas anders aussieht, als ein "normales" Formular. Der Form-Tag hat hier zwei Attribute. Am auffallendsten ist hierbei enctype=multipart/form-data. Damit teilen wir dem Browser mit, dass der Query String völlig anders zusammengebaut werden soll.
Das Schema ?name_eins=value_eins&name_zwei=value_zwei etc. reicht hier nicht mehr, da mit dieser Methode ja nur name/value Paare übertragen werden können. Wenn wir aber ein Bild uploaden wollen, sind die Zusammenhänge wesentlich komplizierter, da sehr viel mehr Informationen übertragen werden müssen. Bei einem Datei upload muss nicht nur der Name des Formularfeldes und das, was der User in das entsprechende Formular eingetragen hat übertragen werden, sondern auch der eigentliche Inhalt der Datei sowie Zusatzangaben (Typ der Datei (png,jpg,gif), Größe in Bytes etc. etc. Während oben stehendes Formular ohne enctype=multipart/form-data einen Query String produziert, der so aussieht (bei method=get)
?datei=C%3A%5Csambar%5Cdocs%5Ckirsche.jpg

Hat der Query String dieses Aussehen,
-----------------------------
7d235c36c0
Content-Disposition: form-data; name="datei";
filename="C:\Eigene Dateien\Eigene Bilder\bildung\bkein.jpg"
Content-Type: image/pjpeg
>die Bits und Bytes die das Bild sind in Hyroglyphen Form<

wenn als Attribut enctype=multipart/form-data hinzugefügt wird. (Nebenbemerkung: Hier wird immer von Query String gesprochen, obwohl man von Query String eigentlich korrekter Weise nur sprechen kann, wenn der Query String url encoded, als Anhängsel an die Url übertragen wird. Da das Aussehen aber unabhängig davon ob post oder get verwendet wurde das gleiche ist, wird hier in beiden Fällen von Query String gesprochen.). Normalerweise bereitet der Import dieses völlig anderen Query String aufgrund seiner wesentlich komplexeren Struktur Probleme. Nicht aber bei PHP. Hier werden automatisch, ohne dass man hier irgendetwas tun muss, alle Informationen zu der Datei in dem zweidimensionalen associative Array $HTTP_POST_FILES gespeichert. $HTTP_POST_FILES ist hierbei nicht beliebig, dieser Array ist für diesen Zweck reserviert. Ein Skript, der den upgeloadeten File entgegennimmt und ihn dann auf der Festplatte des Zielreichners speichert, sieht dann so aus:

<?
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
echo "Der Grösse des Files ist ".$HTTP_POST_FILES['datei']['size']."<br>";
echo "Der File ist vom Typ: ".$HTTP_POST_FILES['datei']['type']."<br>";
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
$dateiname=$HTTP_POST_FILES['datei']['name'];
copy($datei, "dateien//$dateiname");
echo "Der File wurde upgeloaded";
?>

Wie unschwer zu erkennen, muss, damit dieser funktionniert, auf der selben Hierarchiestufe wie der PHP-Skript ein Ordner mit dem Namen dateien vorhanden sein.

vorhergehendes Kapitel