Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Programmierung mit PHP  Teil von  Formulare und PHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: 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!

Vorname: 
Name:
E-Mail:
 
 

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



 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt