:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte
Unternehmen im
Anbieterverzeichnis von SELFPHP
:: SELFPHP Forum ::
Fragen rund um die Themen PHP? In über
120.000 Beiträgen finden Sie sicher die passende
Antwort!
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler.
|
|
Auswertung von Formularen |
Die Auswertung und Übergabe der Formulardaten in PHP ist recht einfach. PHP erkennt selbständig angehängte Daten, egal, ob diese mit GET innerhalb der URI oder mit POST innerhalb des Körpers der Nachricht versandt wurden. Jedes Formularelement ist durch das Attribut name gekennzeichnet und eindeutig identifizierbar. Es erscheint in PHP als Variable mit dem Namen des Elements, gefüllt mit den eingegebenen Werten. Durch Bilder erzeugte Schaltflächen übermitteln in den Variablen $name_x und $name_y die Position des Mauszeigers, relativ zur linken oberen Ecke des Bildes.
Beispiel
<html>
<head>
<title>Kontaktformular</title>
</head>
<body>
<?php
if (!$_POST['gesendet'] && !$_POST['name']) {
?>
<form method="POST" action="<?php echo $PHP_SELF ?>">
<p>Name:
<input type="text" name="name" size="30">
</p>
<p>E-mail:
<input type="text" name="email" size="30">
</p>
<p>Buchbewertung: 1
<input type="radio" name="bewertung" value="1">
2
<input type="radio" name="bewertung" value="2">
3
<input type="radio" name="bewertung" value="3">
4
<input type="radio" name="bewertung" value="4">
5
<input type="radio" name="bewertung" value="5">
6
<input type="radio" name="bewertung" value="6">
</p>
<p>Kommentar:
<textarea name="kommentar" cols="30" rows="5"></textarea>
</p>
<p>Lieblingsthema:
<select name="auswahl">
<option value="PHP">PHP</option>
<option value="MySQL">MySQL</option>
<option value="JAVA">JAVA</option>
<option value="ASP">ASP</option>
</select>
</p>
<p>
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="reset" value="Reset">
<input type="hidden" name="gesendet" value="1">
</p>
</form>
<?php
} else {
echo "
Folgende Daten wurden übermittelt:<p>
<b>Name:</b> $_POST[name]<br>
<b>E-Mail:</b> $_POST[email]<br>
<b>Buchbewertung:</b> $_POST[bewertung]<br>
<b>Kommentar:</b> $_POST[kommentar]<br>
<b>Lieblingsthema:</b> $_POST[auswahl]
<p>
<form method=POST action=$PHP_SELF>
<input type='submit' name='Submit' value='Noch einen Kommentar?'>
</form>
</p>
";
}
?>
</body>
</html>
Sie sollten sich das Beispiel genauer betrachten:
- Das Skript ruft sich selbst auf, der eigene Name wird der vordefinierten Variablen $PHP_SELF entnommen.
- Das Skript ist zweigeteilt, es enthält sowohl das HTML-Formular zum Senden als auch das Skript zum Auswerten.
- Die Überprüfung, ob es sich um die Darstellungs- oder Auswertungsphase handelt, wird anhand der Variablen $_POST['gesendet'] und $_POST[name] vorgenommen.
- PHP wertet gefüllte Formularelemente (Variablen) als true, ungefüllte oder nicht vorhandene als false.
- In der Auswertungsphase werden die Daten wiedergegeben. Das Formular kann erneut aufgerufen werden, indem ein neues Formular gesendet wird.
Das vorliegende Beispiel war vergleichsweise einfach. Es gibt jedoch Formularelemente, die mehr als einen Wert zurückgeben können. So ist es in HTML prinzipiell erlaubt, mehrere Elemente mit demselben Namen zu belegen. Natürlich sollten Sie dies möglichst vermeiden, aber es wäre nicht schlecht, darauf angemessen reagieren zu können. Eine typische Anwendung sind mehrere Checkboxen in einer Gruppe:
<input type="checkbox" name="thema" value="Autos">
<input type="checkbox" name="thema" value="Filme">
<input type="checkbox" name="thema" value="Essen">
<input type="checkbox" name="thema" value="Sport">
Es gibt auch Fälle, in denen Mehrfachangaben ausdrücklich erwünscht sind. So können Sie beispielsweise bei <select> mit dem Attribut multiple eine Mehrfachauswahl zulassen:
<select name="thema" size="4" multiple>
<option value="Autos">Autos</option>
<option value="Filme">Filme</option>
<option value="Essen">Essen</option>
<option value="Sport">Sport</option>
</select>
Bei der Auswertung steht Ihnen diese Auswahl nur in einer einzigen Variablen zur Verfügung. Was passiert mit den Werten? Es könnte sein, dass PHP sie als Array erkennt. Aber was geschieht, wenn Sie die Variable abrufen?
<html>
<head>
<title>Mehrfach Auswahl</title>
</head>
<body>
<form name="form1" method="post" action="<?php echo $PHP_SELF ?>">
<p>
<select name="thema" size="4" multiple>
<option value="Autos">Autos</option>
<option value="Filme">Filme</option>
<option value="Essen">Essen</option>
<option value="Sport">Sport</option>
</select>
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
<?php
if ($_POST['thema']) echo "Thema enthält: $_POST[thema]";
?>
</body>
</html>
Wie Sie sehen werden, wird im Fall der Mehrfachauswahl lediglich immer nur der letzte ausgewählte Wert der Auswahlliste angezeigt. Offensichtlich wird kein Array gebildet, denn die Auswahl $thema[0] verweist nicht wie vermutet auf den ersten Eintrag der ausgewählten Elemente; die Zeichenkette wird als Array erfasst, und lediglich der erste Buchstabe wird ausgegeben.
Wie sieht nun die Lösung des Problems aus? Sie müssen PHP bereits mit dem Namen der Variablen mitteilen, dass ein Array verwendet werden soll, und dafür folgende Stelle im Skript anpassen:
<select name="thema[]" size="4" multiple>
Sie kennzeichnen den Namen mit eckigen Klammern [], die in HTML keine weitere Bedeutung haben. PHP nimmt nun an, dass mehr als ein Wert folgt, und erzeugt ein Array. Dies geschieht natürlich auch dann, wenn tatsächlich nur ein Wert vorliegt. Die Auswertung kann dann recht komfortabel mithilfe einer Schleife durchgeführt werden:
<?php
if ($_POST['thema']) {
echo "Es sind folgende Themen enthalten:<br>";
foreach($_POST['thema'] as $element) {
echo "$element<br>";
}
}
?>
|
|
|
|
|
|