burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
06.02.2012, 11:24 Uhr - Impressum

Tutorials - Erste Schritte - Formulare - Daten checken

Tutorials - Erste Schritte
Formulare: Daten checken
Falsche Eingaben. Ein Problem, mit dem man bei jedem Formular-Eintrag eines Besuchers rechnen muss.
Wir wollen ja später die Daten in einer Datei oder einer Datenbank speichern, da sollten sie aber schon auch brauchbar sein.

Sehr beliebt ist es bei Websitebesuchern, Felder einfach leer zu lassen.

Ich ändere das Script jetzt so ab, dass leere Felder als Fehler erkannt werden.
Wenn nicht in alle Felder etwas eingetragen wurde, wird eine Fehlermeldung ausgegeben.
gesetzt in $_POST 'Vorname', 'Nachname', 'Straße', 'HausNr', 'absenden'
<?php
$error = 0;     /* ich setzte die Variable $error auf 0 - bei größeren Scripten später könnte es ja sein, dass die Variable noch einen Wert trägt */

if($_POST['Vorname'] == "") $error = 1;     /* falls in "Vorname" nichts eingegeben wurde wird error = 1 gesetzt. */
if($_POST['Nachname'] == "") $error = 1;     /* falls in "Nachname"... */
if($_POST['Straße'] == "") $error = 1;     /* ... */
if($_POST['HausNr'] == "") $error = 1;     /* ... */

if($error == 0) {     /* error ist jetzt nur noch dann 0, wenn in allen Textfeldern etwas drinstand... */
     echo "Der Mensch vor diesem PC heißt $_POST[Vorname] $_POST[Nachname],
          er wohnt in der $_POST[Straße] $_POST[HausNr].
";
}
else {     /* else... */
     echo "<font color=red><b>FEHLER IN DEN EINGABEN !!!<br />" .     /* wird die Fehlermeldung ausgegeben */
          "Bitte fülle alle Felder aus</b></font>";
}
?>
Vorname:
Nachname:
Straße:
Hausnummer:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Vorname: <input type="text" name="Vorname"><br />
          Nachname: <input type="text" name="Nachname"><br />
          Straße: <input type="text" name="Straße"><br />
          Hausnummer: <input type="text" name="HausNr" size="5"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
Die vielen if-Bedingungen füge ich mit or (englisch: oder) zu einer einzigen zusammen, sonst bleibt alles unverändert
gesetzt in $_POST 'Vorname', 'Nachname', 'Straße', 'HausNr', 'absenden'
<?php
$error = 0;

if($_POST['Vorname'] == "" or $_POST['Nachname'] == "" or $_POST['Straße'] == "" or $_POST['HausNr'] == "") {
     $error = 1;
}

if($error == 0) {
     echo "Der Mensch vor diesem PC heißt $_POST[Vorname] $_POST[Nachname],
          er wohnt in der $_POST[Straße] $_POST[HausNr].
";
}
else {
     echo "<font color=red><b>FEHLER IN DEN EINGABEN !!!<br />
          Bitte fülle alle Felder aus</b></font>
";
}
?>
Vorname:
Nachname:
Straße:
Hausnummer:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Vorname: <input type="text" name="Vorname"><br />
          Nachname: <input type="text" name="Nachname"><br />
          Straße: <input type="text" name="Straße"><br />
          Hausnummer: <input type="text" name="HausNr" size="5"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
Es gibt eine Funktion, die überprüft, ob eine Variable eine Zahl enthält - diese Funktion heißt "is_numeric()". "is numeric" heißt übersetzt: "ist numerisch" ("ist eine Zahl"). Warum sie genau so heißt, erkennt, wenn man sie im Kontext liest:
if(is_numeric($x))
englisch gelesen: if $x is numeric
deutsch übersetzt: wenn $x numerisch ist (eine Zahl ist)

Was auffällt, es fehlt jedes Vergleichszeichen. Also kein <, kein >, kein ==, kein gar nichts.
Warum ?

is_numeric() gibt einen Wahrheitswert zurück. Entweder true oder false.
Also muss gar nichts mehr verglichen werden, is_numeric() sagt direkt ob die Bedingung richtig oder falsch ist.
gesetzt in $_POST 'Startwert', 'absenden'
<?php
if($_POST['Startwert'] == "")
{
     echo "Keine Zahl eingegeben";
     exit;
}

if(is_numeric($_POST['Startwert']))
{
     if($_POST['Startwert'] < 10000)
     {
          for ($x = $_POST['Startwert']; $x >= 0; $x = $x - 1)
          {
               echo $x;
               echo "<br />\n";
          }
     }
     else {
          echo "Bitte eine niedrigere Zahl eingeben";
     }
}
else {
     echo "Es wurde keine Zahl eingegeben";
}
?>
Countdown von:
(die Zahl bitte kleiner als 10000 wählen)
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Countdown von: <input type="text" name="Startwert"><br />
          (die Zahl bitte kleiner als 10000 wählen)<br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
Manchmal kommt es vor, dass ein User aus versehen ein Leerzeichen mitschickt, dass er (natürlich) im Formular gar nicht gesehen hat.
Oder er versucht besonders clever zu sein und gibt in das Feld nur Leerzeichen ein.

Die Funktion trim() schneidet einer Variablen Leerzeichen am Anfang und am Ende einfach ab.
Besteht der Text nur aus Leerzeichen, ist er dananch leer. ( == "") ";
gesetzt in $_POST 'Vorname', 'Nachname', 'Straße', 'HausNr', 'absenden'
<?php
$error = 0;

$Vorname = trim($_POST['Vorname']);
$Nachname = trim($_POST['Nachname']);
$Straße = trim($_POST['Straße']);
$HausNr = trim($_POST['HausNr']);

if($Vorname == "" or $Nachname == "" or $Straße == "" or $HausNr == "") {
     $error = 1;
}

if($error == 0) {
     echo "Der Mensch vor diesem PC heißt $Vorname $Nachname,
          er wohnt in der $Straße $HausNr.
";
}
else {
     echo "<font color=red><b>FEHLER IN DEN EINGABEN !!!<br />
          Bitte fülle alle Felder aus</b></font>
";
}
?>
Vorname:
Nachname:
Straße:
Hausnummer:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Vorname: <input type="text" name="Vorname"><br />
          Nachname: <input type="text" name="Nachname"><br />
          Straße: <input type="text" name="Straße"><br />
          Hausnummer: <input type="text" name="HausNr" size="5"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
© 2004-2005 - Impressum