Formulardaten übernehmen
Formulardaten werden in PHP in der Regel automatisch übernommen.
Ruft ein Formular eine PHP-Seite als "Action" auf, so werden alle im
Formular benannten Felder egal ob mit POST oder mit GET übergeben
automatisch in nach den Namen der Felder benannte Variablen
umgemünzt (Meist nach dem
EGPCS-System).
Mit
<html>
<form action=form.php method=get>
<input name=email><br>
<input type=checkbox name=newsletter><br>
<input type=submit><br>
</form>
</html>
kann man in form.php die Variablen $email und $newsletter ansprechen.
ABER
Alle Punkte in Formularfeldnamen werden in Unterstriche (_) in den
Variablennamen umgewandelt.
Sollte es wider Erwarten nötig sein, Variablen zu dekodieren (z.B.
wenn sie Sonderzeichen enthalten) bietet
raw_urldecode eine gute
Möglichkeit dazu.
Als Einschränkung muss man bei dieser Bequemlichkeit hinnehmen, dass man
die Variablennamen wissen muss, um sie ansprechen zu können. Um dies zu
umgehen finden Sie einen Trick im Kapitel
Ein Form-Mailer
Warum klappt das bei mir nicht?
Aus Sicherheitsgründen kann in der php.ini (unter Linux: /etc/php.ini, unter Windows:\windows\system32\php.ini)
register_globals auf off geschaltet sein, was die automatische Übernahme in gleichlautende globale Variablen
abschaltet. Erstens: Die Alternative lautet $_REQUEST["namedesformularfelds"] und Zweitens: es gibt zwei
Möglichkeiten zu überprüfen ob register_globals eingeschaltet ist, einerseits kann man einfach testen ob
$_REQUEST["namedesformularfelds"]==$namedesformularfelds, andererseits steht es auch in der Funktion
phpInfo. Beides können Sie mit folgendem Script machen.
<html>
<body>
<form method="post" name="form1">
<input name="hiddenInput" type="hidden" value="1">
<?php
if ($_REQUEST["hiddenInput"]=="1") // $_Request funktioniert auch bei ausgeschaltetem register_globals
{
if ($_REQUEST["hiddenInput"]==$hiddenInput) echo "register_globals ist ON.<br>";
else echo "register_globals ist OFF.<br>";
}
?>
<input type=submit value="Hier klicken um Register-Globals zu testen">
<input type=submit onClick="document.form1.hiddenInput.value=2;" value="Hier klicken um phpInfo zu zeigen.">
<?php // phpInfo ist ziemlich lang, deshalb unter den Knöpfen zeigen
if ($_REQUEST["hiddenInput"]=="2") phpinfo();
?>
</form>
</body>
</html>
Falls Sie PHP als Modul benutzen (meist unter Linux und erheblich schneller als die Windows-CGI-Variante)
vergessen Sie bitte nicht, den Apache neu zu starten (apachectl reload) nachdem Sie die
php.ini geändert haben. Wenn Sie den Apache nicht selbst hosten brauchen Sie ihn auch nicht neu zu starten
- in dem Fall haben Sie in der Regel auch überhaupt keine Rechte, die php.ini zu ändern.
Dateiuploads
Selten genutzt, verkümmert der HTTP-Upload im Schattendarsein der
Web-Mailer. Seine einzige Funktion ist es oft, Anhänge an die
www-basierend-geschriebene eMail zu ermöglichen. Im Grunde ist es
aber ein perfektes Administrationstool.
<!-- HTML-Datei -->
<html>
<form method=post action="formaction.php">
<input type=file name="myfile">
<input type=submit>
</form>
</html>
<!-- PHP-Datei formaction.php-->
<?php
echo $myfile; // Der Name ergibt sich logischerweise
//aus dem Namen des input-tags in der HTML-Datei
echo $myfile_size;
copy ($myfile, "temp.pp0");
?>
Die Formaction gibt den temporären Dateinamen aus und die Dateigröße
des Uploads (Dieser darf nebenbei bemerkt, die Größe die in der PHP.INI
unter upload_max_filesize festgelegt ist, nicht überschreiten. Der
default-Wert liegt bei 2MB). Diese Datei ist so erstaunlich temporär,
dass es sie nach dem Ende des Script schon gar nicht mehr gibt:
also schnell umkopieren (hier in temp.pp0, schöner vielleicht in
$myfile_name, dem Namen der Ursprungsdatei).