PHP: Formularfelder überprüfen

Bob Byte

Admiral Special
Mitglied seit
21.02.2002
Beiträge
1.698
Renomée
9
Standort
in meiner Wohnung
Ich habe mir ein kleines HTML-Formular erstellt das über ein PHP-Skript versendet wird. Der Versand funktioniert auch prima. Nun möchte ich aber noch eine Überprüfung der einzelnen Felder einbauen, habe dazu auch ne Abfrage eingebaut, die jedoch scheinbar gar nicht erst ausgeführt wird, denn selbst wenn ein Feld leer bleib wird sofort die Meldung das die Mail erfolgreich versendet wurde eingeblendet.

Schaut bitte mal rein, vielleicht findet ihr den Fehler, ich vermute das ich in der Schleife irgendwas verbockt habe.

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<?php
 $name=$HTTP_POST_VARS['name'];
 $strasse=$HTTP_POST_VARS['strasse'];
 $plz=$HTTP_POST_VARS['plz'];
 $ort=$HTTP_POST_VARS['ort'];
 $mail=$HTTP_POST_VARS['mail'];
 $kommentar=$HTTP_POST_VARS['kommentar'];
 if ($name==""){
 	print ("<b>Bitte vollständigen Namen eingeben</b><br>");
	}
 if ($strasse=="") {
 	print ("<b>Bitte die Strasse eingeben</b><br>");
    }
 if ($plz==""){
 	print ("<b>Bitte die Postleitzahl eingeben</b><br>");
	}
 if ($ort=="") {
 	print ("<b>Bitte den Ort eingeben</b><br>");
	}
 if ($mail==""){
 	print ("<b>Bitte Betreff eintragen</b><br>");
	}
 if ($kommentar==""){
 	print ("<b>Bitte geben Sie einen Text ein</b><br>");
	}
 if

  ($mail!="") {
   $mailtext="Name: ";
   $mailtext.=$name;
   $mailtext.="\n";
   $mailtext.="Strasse: ";
   $mailtext.=$strasse;
   $mailtext.="\n";
   $mailtext.="PLZ: ";
   $mailtext.=$plz;
   $mailtext.="\n";
   $mailtext.="Ort: ";
   $mailtext.=$ort;
   $mailtext.="\n";
   $mailtext.="E-Mail-Adresse: ";
   $mailtext.=$mail;
   $mailtext.="\n";
   $mailtext.="Anfrage: ";
   $mailtext.="\n";
   $mailtext.=$kommentar;
   $absender="From:";
   $absender.=$mail;
   mail("XX@YY", "Anfrage über das Kontaktformular", $mailtext, $absender);
   print ("Ihre E-Mail wurde erfolgreich verschickt." );
   print ("<br>");
   print ("Sie werden in wenigen Augenblicken zur Startseite geführt.");
  }
 else {
  print ("Sie haben keine E-Mail-Adresse angegeben...<br><br>");
  print ("<a href='kontakt.html'>Zur&uuml;ck...</a>");
 }

?>
</body>
</html>
 
Naja, so würde es reichen, daß das Feld e-mail-Adresse nicht leer ist (Du überprüfst ja nicht mal, ob ein @ und ein Punkt vorkommen), dann werden alle IF-Anweisungen ausgeführt, inkl. des Absendens.

Du müßtest das Verschachteln, oder zumindest die Bedingungen verknüpfen, z.B.

PHP:
if ($name=="" || $strasse=="" || $plz=="" || $ort=="" || $mail=="" || $kommentar=="") {
   print ("Sie haben irgendwas vergessen");
   // könnte man jetzt nochmal auffächern mit einer Reihe IFs nebeneinander
   // Zurück-Link 
} else {               // d.h. nur wenn in allen Feldern was steht 
   // schicke Formular ab
}
 
Ich würde dir empfehlen den Weg über Javascript zu gehen.
Wenn du es per PHP prüfen möchtest, solltest du mit Session oder per DB die eingegebenen Werte zwischenspeichern, sonst sind sie weg wenn dein Besucher eine Fehlangabe oder keine Angabe macht und auf das Formularfeld zurückkehrt ...
 
@OBrian: Ich bin frisch bei PHP, daher nur erstmal diese einfache Fassung. Dabei ist aber auch von mir geplant das Stück für Stück auszubauen, je nachdem wie schnell ich mit dem lernen ran komme ;). Die Überprüfung auf Eingabe ist da auch mit inbegriffen.

@G-S-X: Muss ich mir mal anschauen ob ich da was entsprechendes finde, denn Javascript kann ich (leider ? ) gar nicht. Da ich mich derzeit etwas an PHP rantaste, war das auch meine erste Wahl.

Gruß BB
 
@OBrian: Ich bin frisch bei PHP, daher nur erstmal diese einfache Fassung. Dabei ist aber auch von mir geplant das Stück für Stück auszubauen, je nachdem wie schnell ich mit dem lernen ran komme ;). Die Überprüfung auf Eingabe ist da auch mit inbegriffen.
Kein Problem, das hatte ich auch nur so nebenbei erwähnt. Das eigentliche Problem hier war ja auch der logische Ablauf, der ist eigentlich auch unabhängig von der Programmier- oder Skriptsprache.

Am besten überlegst Du Dir sowas erstmal theoretisch und malst es mit Kästchen und Pfeilen auf Papier, damit das Gerüst klar ist. In der professionellen softwareentwicklung macht man das auch, mit speziellen Diagrammen usw., soviel Aufwand muß man ja nicht treiben, aber das ist für den Überblick schon besser, als gleich loszucoden.
 
überlegt habe ich mir das schon vorher wie das laufen soll, es hapert nur an der Ausführung ;).

Gruß BB
 
@Bob Byte: Du hast nur einen kleinen Fehler in Deinem Script: die einzelnen if-Anweisungen kommen lose nacheinander, insofern wird jeder if ausgeführt, egal wie der vorherige ausgegangen ist. Wenn Du nach dem ersten if quasi "abbrechen" möchtest, musst Du die nächsten mit elseif anhängen. Das sieht dann etwa so aus:

PHP:
if ( bedingung1 ) {
  echo("Bedingung 1 ist wahr");
}
elseif ( bedingung 2 ) {
  echo("Bedingung 2 ist wahr");
}
else {
  echo("Hier kommt man nur an, wenn weder Bedingung 1 noch Bedingung 2 wahr geworden ist");
}

echo ("Hier geht es in jeden Fall weiter");

Das zusammengeschriebene "elseif" ist PHP-spezifisch und kann man wahlweise auch auseinander ("else if") schreiben, so wie es auch in anderen C-Syntax-ähnlichen Programmiersprachen funktioniert. Ich vermute, dass es zusammengeschrieben einen Tick schneller ist, weil es dann für den Parser nur ein Schlüsselwort anstatt zwei darstellt.
 
Zurück
Oben Unten