form: Vor "post" felder Prüfen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
uwe.ha
Mitglied
Beiträge: 838
Registriert: 18.05.2001 02:00

form: Vor "post" felder Prüfen

Beitrag 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!
Uwe
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

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

Beitrag 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.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
uwe.ha
Mitglied
Beiträge: 838
Registriert: 18.05.2001 02:00

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

Beitrag 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 ;-)
Uwe
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

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

Beitrag 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();
} 
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
uwe.ha
Mitglied
Beiträge: 838
Registriert: 18.05.2001 02:00

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

Beitrag 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!
Uwe
Antworten

Zurück zu „Coding & Technik“