Seite 1 von 1

form: Vor "post" felder Prüfen

Verfasst: 30.10.2009 09:51
von uwe.ha
Hallo zsuammen,

ich suche mir seit gestern "nen Wolf", komme aber nicht weiter ...

Ich habe ein Formular

Code: Alles auswählen

<form action="bestaetigung.php" method="POST" name="Bestellung">
BEVOR dieses Formular abgeschickt wird (also bevor die bestaetigung.php aufgerufen wird ... wenn das nicht geht, dann eben in der bestaetigung.php)) soll geprüft werden:
- ob in die Felder $anzahl und $plz auch wirklich Zahlen eingegeben wurden
- ob in das Feld $email auch eine email - also mit "@" und "." - eingegeben wurde
- ob in das Auswahlfeld $land auch ein Wert ausgewählt, oder nur die Standardeinstellung "Bitte wählen Sie ein Land" beibehalten wurde.

Gibt es vielleicht noch eine "Prüfung", die davor schützt, dass durch das Formular "Schadcode" abgeschickt wird?

Für einen Link zu einem Tutorial oder sonstige Hinweise wäre ich sehr dankbar ... ich will ja auch was Lernen ;-)

DANKE!

Re: form: Vor "post" felder Prüfen

Verfasst: 30.10.2009 10:21
von mad-manne
uwe.ha hat geschrieben:ich suche mir seit gestern "nen Wolf", komme aber nicht weiter ...
Hmm, wie wärs denn mit folgenden Suchbegriffen(die eher englische Seiten listen werden) :roll:
  • PHP input validation
  • Javascript Input validation
BEVOR dieses Formular abgeschickt wird (also bevor die bestaetigung.php aufgerufen wird ... wenn das nicht geht, dann eben in der bestaetigung.php)) soll geprüft werden:
Wichtig ist hier vor allem, dass dir klar sein muss, dass du die Prfung immer auf jeden Fall in deiner verarbeitenden PHP-Datei vornehmen musst um sicherzustellen, dass kein falscher oder schädlicher input übergeben werden kann!

Eine vorgeschaltete Validierung mittels Javascript ist lediglich eine Verbesserung der GUI, weil der User nun bereits bei der Eingabe auf Fehler hingewiesen werden kann. Da aber kein Verlass darauf ist, dass der User JS auch aktiviert hat, musst du wie gesagt immer im Script prüfen!!!

Gruss,
Manne.

Re: form: Vor "post" felder Prüfen

Verfasst: 30.10.2009 12:15
von uwe.ha
Hallo Manne,

vielen Dank; hab's jetzt mit JS (DW hat ne schöne Funktion zur Überprüfung) und PHP gemacht.

In der bestaetigung.php steht nun:

Code: Alles auswählen

if(empty ($_POST["anzahl"]) OR empty ($_POST["vorname"]) OR empty($_POST["nachname"]) OR empty ($_POST["strasse"]) OR empty ($_POST["plz"]) OR empty ($_POST["ort"]) OR empty ($_POST["email"]))
{echo "<p>Bitte füllen Sie alle Felder aus!<br><a href='javascript:history.back()'>zurück zu Ihren Eingaben<br></a>";}
if(!is_numeric ($_POST ["anzahl"]) OR !is_numeric ($_POST ["plz"]))
{echo "<p>Falsche Eingabe bei Anzahl oder PLZ!<br><a href='javascript:history.back()'>zurück zu Ihren Eingaben<br></a></p>";}
if (!ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $_POST["email"]))
{echo "<p>Falsche Eingabe bei E-Mail!<br><a href='javascript:history.back()'>zurück zu Ihren Eingaben<br></a></p>";}
else
{
mail(...
Es funktioniert zwar, aber lass mich zum Verständnis nochmal nachfragen:

- empty prüft, ob die Felder leer sind. Wenn true -> Fehlermeldung

- !is_numeric prüft, ob z.B. plz ungleich einem numerischen Wert ist. Wenn true -> Fehlermeldung
Ist !is_numeric ok, oder ist ctype_alpha besser ... oder letztlich egal, weil gleich?

- !eregi prüft, ob das Feld $email ungleich dem typischen Aufbau einer emailadresse ist. Wenn true -> Fehlermeldung

Ansonsten so - mit den "if" - ok, oder gehört da elseif rein?

DANKE! ... wieder was gelernt ;-)

Re: form: Vor "post" felder Prüfen

Verfasst: 11.11.2009 08:28
von gn#36
Das erste was ich daran ändern würde ist die Einrückung, da kann man ja kaum was erkennen...

So wie der Aufbau ist wirft er aber das Problem dass nur eine fehlerhafte Mailadresse den Emailversand verhindert, in allen anderen Fehlerfällen wird trotzdem die Mail verschickt (oder was auch immer sonst du noch im else Zweig machst). Elseif würde dieses Problem lösen, allerdings bekommst du dann natürlich auch immer nur eine der Fehlermeldungen ausgegeben selbst wenn mehrere Probleme existieren.
Außerdem birgt das immer noch das Problem das potenziell unerwünscht nach dem Else noch Code ausgeführt wird, ich habe mir daher angewöhnt nach der Datenprüfung bei Fehlern sofort die Abarbeitung des Skriptes zu beenden. Das kann z.b. per [php:die] erfolgen oder indem du wie bei phpBB 2 eine spezielle Funktion aufrufst die eine hübsch formatierte Nachricht ausgibt und das Skript dann beendest (den Aufbau von phpBB3 halte ich für unklug, denn trigger_error ist in meinen Augen eigentlich für Ablauffehler gedacht und nicht für Statusmeldungen).

Beispielhafter Aufbau:

Code: Alles auswählen

$error = false;
if($erste_datenpruefung == FEHLERHAFT)
{
$error = true;
echo "Fehlermeldung 1";
}
if($zweite_datenpruefung == FEHLERHAFT)
{
$error = true;
echo "Fehlermeldung 2";
}
...
//Gab's einen Fehler?
if($error)
{
die();
} 

Re: form: Vor "post" felder Prüfen

Verfasst: 11.11.2009 09:16
von uwe.ha
Hallo gn#36,

das mit dem elseif habe ich auch schon festgestellt und entsprechend geändert.
Den Rest schaue ich mir mal genauer an, und versuche es entsprechend umzusetzen.
VIELEN DANK!