copyright (c)  2003   useGroup
PHP

Jochen Stärk
PHP-Tutorial
Formulardaten übernehmen

nach untenFormulardaten übernehmen
nach untenWarum klappt das bei mir nicht?
nach untenDateiuploads

Formulardaten übernehmen

nach obenFormulardaten ü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?

nach obenWarum 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

nach obenDateiuploads 

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


copyright (c)  2003   useGroup