Folien



(letzte Synchronisation der PDF-Präsentation: 02.08.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Variablenprüfung mit if/else und isset()

isset() prüft, ob die Variable existiert (gibt true zurück) oder nicht (gibt false zurück). Das ist bspw. immer dann der Fall, wenn ein Formular abgesendet wurde – auch wenn es leer abgesendet wurde. Deshalb muss zusätzlich abgefragt werden, ob das Feld leer ist (if ($nachname != "")).

Warum man isset() braucht:
Eigentlich könnte man sagen: “Es genügt, wenn ich abprüfe, ob das Feld leer ist.” Mit der isset()-Prüfung möchte man jedoch störende Fehlermeldungen vermeiden, z.B. im Falle bei der Abfrage eines nicht existenten Buttons oder Feldes:

PHP-Code
  $flitz = $_POST['nicht_existenter_button']; if $flitz != "" ...  

führt zu einer Fehlermeldung. if $feld != "" sollte als nur dann verwendet werden, wenn GANZ sicher ist, dass die Variable initialisiert wurde. Und das kann man mit isset abprüfen.

PHP-Code
  if (isset($geschlecht) && ($geschlecht != "")) { echo "Geschlecht angegeben, sehr gut"; } else { echo "kein Geschlecht angegeben, schlecht"; }  

Mit isset() kann der Absendebutton überprüft werden und damit Formulardarstellung und Auswertung auf einer Seite vorgenommen werden:

PHP-Code
  <?php if (isset($_POST['nachname']) && $_POST['nachname'] != "") { echo "Hallo ". $_POST 'nachname']!; exit; } elseif (isset($_POST['absenden'])) { echo "Bitte alle Felder ausfüllen!"; } ?> <form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "post" /> Ihr Nachname: <input type = "text" name = "nachname" /><br /> <input type = "submit" value = "begrüße mich!" name = "absenden" /> </form>  

Wenn das Feld nicht ausgefüllt wurde, erhält man die Fehlermeldung “Bitte alle Felder ausfüllen!” und erneut das Formular. Wurde das Feld ausgefüllt, erhält man die Ausgabe “Hallo NACHNAME!”.

Formularwerte bei Reload erneut anzeigen

Wenn ein Feld nicht ausgefüllt wurde (“Bitte füllen Sie alle Felder aus.”), wäre es komfortabel, wenn beim erneuten Anzeigen des Formulars die bereits ausgefüllten Felder nicht erneut ausgefüllt werden müssen.

1. Textfeld

PHP-Code
  Ihr Lieblingseis: <input type = "text" name = "eis" value = "<?php if ($_POST['eis'] != "") { echo $_POST['eis']; } ?>" />  

2. Checkboxen oder Radio-Buttons

PHP-Code
  Ihr Geschlecht: m<input type = "radio" name = "geschlecht" value = "m" <?php if ($_POST['geschlecht'] == "m") { echo "checked = \"checked\""; } ?> /> - w<input type = "radio" name = "geschlecht" value = "w" <?php if ($_POST['geschlecht'] == "w") { echo "checked = \"checked\""; } ?> />  

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: PHP - isset() *****

PHP-14_1: Verständnis über die Benutzung von isset() zur Verifizierung des Status von Formularfeldern

Erklären Sie, warum im folgenden Skript beim ersten Aufrufen des Formulars die Fehlermeldung "Undefined index ..." auftritt, obwohl das Skript ansonsten funktioniert (möglicherweise wird die Fehlermeldung nicht bei Ihnen angezeigt, weil sie unterdrückt wird; im php_error.log finden Sie sie aber).


PHP-Code
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   <html> <head> <title>Einfache isset-Uebung 1</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head>   <body> <h1>Einfache isset-Uebung 1</h1> <p>Status einer Bestellung abfragen</p> <form method = "GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">   <label for="bestellnummer">Bestellnummer: </label><input type="text" name="bestellnummer" id="bestellnummer" value="" style="border-color : green"/> <label for="nachname">Ihr Nachname: </label><input type="text" name="nachname" id="nachname" value="" style="border-color : blue"/> <input type = "submit" name="submit" value="Anfrage absenden">   </form>   <?php echo "<p>Sie haben folgende Daten eingegeben:<br /> Nachname: " . $_GET['nachname'] . "<br /> Bestellnummer: " . $_GET['bestellnummer'] . "</p>"; ?>   </body> </html>  


PHP-14_2: isset() - Einfache Übung 1

Die isset-Abfrage im folgenden Skript muss ergänzt werden.

a) Die eingegebenen Bestelldaten sollen unter dem Formular ausgegeben werden, aber nur, wenn das Formular abgesendet wurde.
b) Wenn ein Feld leer abgeschickt wurde, soll eine entsprechende Meldung ausgegeben werden ("Es wurde keine Bestellnummer eingegeben o.ä.").

PHP-Code
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   <html> <head> <title>Einfache isset-Uebung 1</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head>   <body> <h1>Einfache isset-Uebung 1</h1> <p>Status einer Bestellung abfragen</p> <form method = "GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">   <label for="bestellnummer">Bestellnummer: </label><input type="text" name="bestellnummer" id="bestellnummer" value="" style="border-color : green"/> <label for="nachname">Ihr Nachname: </label><input type="text" name="nachname" id="nachname" value="" style="border-color : blue"/> <input type = "submit" name="submit" value="Anfrage absenden">   </form>   <?php if(isset($_GET['submit'])) // Formular wurde mit submit-Knopf abgeschickt {   // HIER BITTE EINGEGEBENE BESTELLNUMMER UND EINGEGEBENEN NACHNAMEN AUSGEBEN   } else { echo "<p><strong>Hier werden Sie nach dem Abschicken des Formulars das Ergebnis Ihrer Anfrage sehen.</strong></p>"; }     ?>   </body> </html>  




PHP-14_3: Skript ergänzen

Ergänzen Sie das folgende Skript an den entsprechenden Stellen, dass es korrekt läuft.

PHP-Code
<?php $farbe = "black"; if (1 == 1) // Hier korrekt ergänzen { $bestellnummer = $_GET['bestellnummer'];   if (1 == 1) // Hier korrekt ergänzen { $farbe = "red"; $message = "Bitte fuellen Sie die rot umrandeten Felder aus.";   } else { $message = "Sie haben die Bestellnummer " . $hierbitteergaenzen . " eingegeben."; // korrekte Variable eintragen }   }     ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   <html> <head> <title>Skript ergaenzen</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> </head>   <body> <h1>Isset() - Skript ergaenzen</h1> <p>Status einer Bestellung abfragen</p> <form method = "GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">   <label for="bestellnummer">Bestellnummer: </label><input type="text" name="bestellnummer" id="bestellnummer" value="" style="border-color : <?php echo $farbe; ?>"/> <input type = "submit" name="submit" value="Anfrage absenden">   </form>   <?php // Hier bitte ergaenzen (Ausgabe soll erfolgen, entweder "Sie haben Bestellnummer xy eingegeben" oder // "Bitte alle Felder ausfüllen"   // Sie brauchen nur EINE Zeile! ?>   </body> </html>  

PHP-14_4: isset() - Button abfragen

Erstellen Sie ein Formular, das ein Passwort ($passwort) abfragt. Überprüfen Sie nach dem Absenden des Formulars mit dem Button "submit", ob die beiden Variablen ($passwort und der "submit"-Button) initialisiert wurden. Geben Sie eine entsprechende Meldung aus ("Button wurde gedrückt/nicht gedrückt."; "Variable für \$passwort ist initialisiert/nicht initialisiert.").

Bevor Sie das Programm testen: Welche der vier Meldungen werden Sie niemals zu Gesicht bekommen?
1. Button wurde gedrückt.
2. Button wurde nicht gedrückt.
3. $passwort wurde initialisiert.
4. $passwort wurde nicht initialisiert.




Weitere Übungen finden Sie in den Verzeichnissen (dazu müssen Sie aber schon isset() können, siehe php12_isset):
php14_UE1-gleiche-seite
php14_UE2-gleiche-seite
php14_UE3-andere-methode
php14_UE4-markierung