Problem beim Abbruch des Scripts über exit()
harald
- php
Hallo,
ich versuche gerade ein PHP-script zu basteln, das ähnliche Funktionen wie die eines Gästebuchs übernehmen soll.
Nun soll bei der Auswertung der eingegebenen Daten (in die Formularfelder), einige Sachen überprüft werden:
Um das alles nacheinander zu kontrollieren, verstricke ich mich gerade in endlosen if/else-Schleifen (da ja nicht nur eine Bedingung, sondern alle erfüllt sein müssen), also zB.:
if (name=inkorrekt)
print "xy"
else
if(e-mail=inkorrekt)
print "xy"
else(webseite=inkorrekt)
print "xy"
if(...)
also ziemlich unübersichtlich ...
Daher dachte ich könnte ich das auch mit der exit()-Funktion realisieren, z.B.:
if (name=inkorrekt)
exit ->script abbrechen
if (e-mail=inkorrekt)
exit
if (xy=inkorrekt)
exit
usw.
Allerdings ist das script in HTML eingebettet und wenn ein exit()-Befehl ausgeführt wird, wird aufeinmal der nach dem script noch stehende html-Text einfach nicht mehr geschrieben.
Also es hört einfach mit der exit-nachricht auf und der gesamte HTML-Text, obwohl er sich ausserhalb des PHP-Scripts befindet (ausserhalb von ?>), wird einfach "abgeschnitten".
Bei der Funktion die() geschieht das selbe.
Kann mir da jemand weiterhelfen?
Hallo,
if (name=inkorrekt)
print "xy"
else
if(e-mail=inkorrekt)
print "xy"
else(webseite=inkorrekt)
print "xy"
if(...)also ziemlich unübersichtlich ...
if ((name) || (mail) || (webseite)) || (wetter==gut) || (himmel==blau) || (bier==schmeckt)) {
echo "Passt";
}
Grüße
if ((name) || (mail) || (webseite)) || (wetter==gut) || (himmel==blau) || (bier==schmeckt)) {
echo "Passt";
}
Naja, ganz so einfach ist es leider nicht, weil die Überprüfungen doch etwas aufwendiger sind (for-Schleifen innerhalb der if-Schleifen etc.).
Hi harald!
Naja, ganz so einfach ist es leider nicht, weil die Überprüfungen doch etwas aufwendiger sind (for-Schleifen innerhalb der if-Schleifen etc.).
Was hindert dich denn, die for-Schleifen auszulagern?
Hast du auch schon einmal daran gedacht, dass jemand seine(n) Email-Adresse, Homepage, Name, etc. _nicht_ angeben will? Was passiert dann wohl? Richtig, es wird irgendwelcher Mist eingegeben. Mein Tipp: Stelle es dem Benutzer frei, was er eingeben möchte, solange die Nachricht nicht leer ist.
MfG H☼psel
if ((name) || (mail) || (webseite)) || (wetter==gut) || (himmel==blau) || (bier==schmeckt)) {
echo "Passt";
}Naja, ganz so einfach ist es leider nicht, weil die Überprüfungen doch etwas aufwendiger sind (for-Schleifen innerhalb der if-Schleifen etc.).
Dann prüfst du halt vorher, setzt in der jeweiligen Variable ein "Häkchen" und fasst am Ende alle Variablen wie oben zusammen.
Da du im Fehlerfall sicher das Formular neu ausgeben möchtest, um den Benutzer nicht mit einer Anweisung "Bitte zurückblättern!" zu langweilen, brauchst du die Variablen sowieso, um an die entsprechenden Formularfelder hervorzuheben und mit der Meldung zu versehen.
Grüße!
PS: Es gibt keine if-Schleifen.
Hi harald!
Peterle hat dir ja schon die einfachste Lösung genannt.
if (name=inkorrekt)
Was soll denn da deiner Meinung nach passieren?
[...]
also ziemlich unübersichtlich ...
"Ziemlich" ist untertrieben.
Also es hört einfach mit der exit-nachricht auf und der gesamte HTML-Text, obwohl er sich ausserhalb des PHP-Scripts befindet (ausserhalb von ?>), wird einfach "abgeschnitten".
Die Funktion exit() bricht ja auch das Script ab. Alles was danach kommt, wird nicht mehr angezeigt. Dabei ist es egal, ob es sich um HTML, alte Frauen oder Bäume handelt. [1]
Bei der Funktion die() geschieht das selbe.
Nicht ganz. Sie gibt zusätzlich noch eine Nachricht aus.
[1] Wobei ich zugeben muss, dass Bäume nicht ganz so gefährlich sind wie alte Frauen. Hat aber nichts mit dem Thema zu tun und deswegen werde ich auch nichts weiter ausführen.
MfG H☼psel
echo $begrüßung;
$errors = array();
if (name=inkorrekt)
$errors[] = 'Name falsch';
if (e-mail=inkorrekt)
$errors[] = 'Email falsch';
if (xy=inkorrekt)
$errors[] = 'xy falsch';
usw.
if ($errors) {
echo 'Folgende Fehler sind aufgetreten:<br/>';
echo implode('<br/>', $errors);
...
} else {
...
}
echo "$verabschiedung $name";