Posted by PS-Talk on 02 19th, 2009 | no responses

Formulare über mehrere Seiten

Das ist natürlich sehr stressig, da dies meist über versteckte Formularfelder geschieht.
Mit einer kleinen PHP Funktion kann man die versteckten Formularfelder dynamisch erzeugen.

<?php
function dyn_form()
{
global $HTTP_POST_VARS, $HTTP_GET_VARS;
if (isset($HTTP_POST_VARS)) {
//bei POST
foreach ($HTTP_POST_VARS as $key => $elem) {
echo "<input type=\"hidden\" name=\"$key\" value=\"$elem\">";
}
}
else {
//bei GET
foreach ($HTTP_GET_VARS as $key => $elem) {
echo "<input type=\"hidden\" name=\"$key\" value=\"$elem\">";
}
}
} //end function
?>

Die Funktion dyn_form() ist eigentlich leicht zu verstehen. Zunächst wird den jeweiligen Arrays $HTTP_POST_VARS, bzw. $HTTP_GET_VARS globale Eigenschaften gegeben, d.h. diese müssen nicht an die Funktion übermittelt werden, sondern sind direkt in die Funktion integriert.
Die erste if-Bedingung prüft mit der Funktion isset(), ob die jeweiligen Arrays gesetzt sind, wenn ja, dann wird das entsprechende $HTTP_POST_VARS oder $HTTP_GET_VARS , weiter verarbeitet.
Dies erledigt eine Foreach-Schleife. Mit ihr wird der Schlüssel, oder Index des Arrays, sowie der zugewiesene Wert ermittelt, und dann im versteckten Formularfeld wieder ausgegeben, sodass die Daten erneut an das nächste Skript verschickt werde können.

Das ganze könnte z.B. so aussehen.

Formular 1:

<form method="post" action="formular_2.php">
<p>Name: <input type="text" name="name"><br>
Strasse: <input type="text" name="strasse"><br>
Plz/Ort: <input type="text" name="ort"><br><br>
<input type="submit" value="Weiter!"></p>
</form>


formular_2.php

<form method="post" action="send.php">
<p>Kreditinstitut: <input type="text" name="bank"><br>
Konto-Nr.: <input type="text" name="kto_nr"><br>
Blz: <input type="text" name="blz"><br><br>
<?php dyn_form(); ?> <!-- Aufruf der Funktion dyn_form() -->
<input type="submit" value="absenden">
</p></form>


Keine Kommentare »

Noch keine Kommentare

RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

Hinterlasse einen Kommentar