PHP/MySQL - Praxistutorial 2 - Daten überprüfen Teil 2
1. Die Abschnitte
- Überblick
- Notices
- Notices abfangen
- Daten überprüfen Teil 1
- Daten überprüfen Teil 2
- Daten absichern Teil 1
- Daten absichern Teil 2
2. POST-Werte durchlaufen
Bisher haben wir in dieser Datei ja nichts anderes gemacht, als nach einer Übermittlung des Formulars einfach alle Einträge in die
Datenbank zu semmeln. Jetzt wollen wir mal nachsehen, ob denn alle Pflichtfelder überhaupt ausgefüllt worden sind. Dazu bauen wir
innerhalb der Bedingung if ($_POST)
eine Schleife ein.
foreach ($input as $key => $value)
{
...
}
Erläuterung
Einige von euch werden sich jetzt sicher die folgende Frage stellen. Warum wühlt sich der Dödel denn jetzt durch das
$input
-Array? Ganz einfach. Die assoziativen Indizes sind identisch mit den Namen der Eingabefelder. So verhindert man,
dass alle Formularelemente geprüft werden. Gut in unseren Fall ist das nur der Text des submit
-Buttons. Aber was
passiert bei zig hidden
-Feldern? Die braucht man nicht zu validieren. Es sei denn, darin sind wichtige Werte enthalten.
Aber das ist Teil dieses Tutorials.
3. Die Überprüfung
erfolgt nun innerhalb der Schleife. Dabei nutzen wir die Variable $key
, die den jeweiligen assoziativen Wert des
Array-Elements von $input
enthält. Wer sich darunter nichts vorstellen kann, soll einfach mal in die Schleife ein echo
key
einbauen. Das $value
brauchen wir hier nicht, da uns die leeren Werte eh nicht interessieren. Das müssen wir nur
wegen der korrekten Syntax machen.
Wenn
if ((empty($_POST[$key]) || '???' == $_POST[$key])
&& isset($warning[$key]))
{
...
}
Erläuterung
Zunächst mal besteht die Bedingung aus zwei Hauptteilen. Da hätten wir zuerst (empty($_POST[$key]) || '???' == $_POST[$key])
,
das durch die äußeren Klammern zu einer Einheit gebündelt wurde, und dann && isset($warning[$key])
. Im ersten Teil
überprüfen wir, ob der Post-Wert des input
-Feldes mit Namen $key
leer ist (empty
),
oder ob da ein ???
drin steht. Was Letzteres angeht, dazu komme ich gleich. Dieser Ausdruck ist also wahr,
wenn eine der beiden Bedingungen erfüllt ist.
Im zweiten Teil sehen wir dann nach, ob das Element mit dem assoziativen Index $key
im Array $warning
existiert.
Das geschieht mittels isset($warning[$key])
. Somit überprüfen wir nur unsere Pflichtfelder, weil diese Bedingung eigenständig
ist und mit der ersten Teilbedingung durch ein logisches UND verknüpft worden ist.
Die gesamte Bedingung ist also dann wahr, wenn zuerst entweder das Pflichtfeld leer ist oder aus ???
besteht und dann auch noch der entsprechende Eintrag im Array $warning
existiert.
Dann
$warning[$key] = $style;
$input[$key] = '???';
$error = true;
Erläuterung
Dieser Code kommt natürlich in(!) die obige Bedingung. Also wenn die erfüllt ist, weisen wir zunächst unserem jeweiligen
Array-Element $warning[$key]
die CSS-Definition $style
zu. Dann bekommt das fehlerhaft ausgefüllte Textfeld
als value
die drei Fragezeichen. Dabei müsst ihr nur an das value="<?php echo $input['doktor'];?>"
denken. Und zu guter Letzt setzen wir die Variable $error
auf true
.
Sonst
else
{
$input[$key] = $_POST[$key];
}
Erläuterung
Also wo das hingehört, sage ich nicht mehr. Das solltet ihr eigentlich wissen. Ansonsten ist hier nur interessant, dass wir den jeweiligen
Array-Indizes von $input
den entsprechenden POST-Wert zuweisen. Und das benötigen wir wofür? Genau für value="<?php
echo $input['doktor'];?>"
.
4. Das SQL-Statement
... muss jetzt nur in eine entsprechende Bedingung gepackt werden und alles ist feini, feini.
if (false === $error)
{
$query = '...';
$result = mysql_query ...;
}
Wenn also jetzt ein Vollpfosten ohne nachzudenken auf "Eingeben" klickt, so wird er sanft auf seine Fehler aufmerksam gemacht. Wer das hier nicht so ganz verstanden hat, sollte sich noch mal Stück für Stück durch den Code wühlen und ein wenig herumspielen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt