|

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.
|
 |