SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=185&group=32&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


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:
{PSP}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>";
    }
  }
?>