PHP Auf Leeres Formular prüfen

Doenes91

Cadet 4th Year
Registriert
Juli 2008
Beiträge
96
Hallo,

für ein Projekt arbeite ich zur Zeit an einer Benutzer-Registrierung für eine Website.
Dazu füllt der Benutzer ganz gewöhnlich ein Formular aus, dessen Daten dann in eine SQL-Datenbank eingetragen werden.

Nun habe ich ein kleines Problem:
Ich möchte verhindern, dass wenn ein oder mehrere Felder nicht ausgefüllt wurden, die Daten NICHT an die Datenbank übertragen werden, wieso ist denke ich logisch.
Allerdings bekomme ich es einfach nicht gebacken zu überprüfen ob ein Feld ausgefüllt wurde oder nicht.

Die wichtigen Code-Abschnitte:

Code:
        $vname=$_POST['vname'];
	$nname=$_POST['nname'];
	$benutzer=$_POST['benutzer'];
	$passwort=$_POST['passwort'];
	$ort=$_POST['ort'];
	$strasse=$_POST['strasse'];
	$plz=$_POST['plz'];
	$geraet=$_POST['geraet'];
	$ability=$_POST['ability'];


$sql = "INSERT INTO ". 
    "users (u_nickname, u_passwort, u_nachname, u_vorname, u_ort, u_strasse, u_plz, g_id, a_id)". 
  "VALUES ('".$benutzer."', '".md5 ($passwort)."', '".$nname."', '".$vname."', '".$ort."', '".$strasse."', '".$plz."', '".$gid."', '".$aid."')"; 
 
	
	mysql_query ($sql);  
	

	header ("Location: login.php");

Kurze Erläuterung:

Die Formulardaten werden per POST-Methode in Variablen eingetragen, diese werden dann per SQL an die Datenbank übertragen und der Benutzer wird zum login weitergeleitet.

Dies soll natürlich nur geschehen wenn alles ausgefüllt wurde.
Habe schon gegoogelt und bin dabei auf die empty Funktion gestoßen.
Habe dann einfach mal per If-Anweisung testweise die $vname überprüft (if(empty($vname))). Aber irgendwie wird diese Anweisung einfach ignoriert und die Daten werden trotzdem an die Datenbank übertragen und der Nutzer wird trotzdem weitergeleitet auf login.php.

Hoffe ich habe es nicht zu kompliziert erklärt....
Kann mir jemand weiterhelfen?
 
Ich mach sowas jeweils wie folgt:

PHP:
$errors = 0;
foreach($_POST as $k=>$v){
if($v == ""){
$errors++;
}
}

if($errors == 0){
Hier das SQL statement etc.
}

Also Loop durch die POST-Daten, falls eine leer sein sollte -> errors erhöhen und diese danach überprüfen.
 
Ich mach das gerne so, da wenn ich mehrere $var einzeln abfrage gerne individuelle Fehlermeldungen produziere. Bei der foreach Schleife gibt es nur eine Meldung!

if(!empty($var1) && !empty($var2)) {

SQL Statement

}
else echo 'Fehlermeldung';

if(empty($var)) = wenn leer
if(!empty($var)) = wenn nicht leer
 
EDIT: Gelöscht, Denkfehler :D

Die obere Lösung verstehe ich leider nicht :/

@Braumeister: Das habe ich ja schon versucht, aber wenn ich ein leeres Formular übermittle und dann eine empty Anweisung benutze, funktioniert es einfach nicht. Heißt wenn ich (!empty) mache, führt die Anweisungen trotzem aus, obwohl die Bedingung eigendlich gar nicht zutreffen dürfte.
 
Zuletzt bearbeitet:
Doenes91 schrieb:
EDIT: Gelöscht, Denkfehler :D

Die obere Lösung verstehe ich leider nicht :/

@Braumeister: Das habe ich ja schon versucht, aber wenn ich ein leeres Formular übermittle und dann eine empty Anweisung benutze, funktioniert es einfach nicht. Heißt wenn ich (!empty) mache, führt die Anweisungen trotzem aus, obwohl die Bedingung eigendlich gar nicht zutreffen dürfte.

Du hast das wohl falsch verstanden, !empty bedeutet "nicht leer", also:

$var = '';

if (empty($var)) {echo 'Die Variable ist Leer'; }
if (!empty($var)) {echo 'Die Variable ist nicht Leer';}

du kannst aber auch die $_POST werte überprüfen:

if(!isset($_POST['vname']) {echo 'Es wurden nicht alle Formularfelder ausgefüllt!';}

*edit*

Du könntest die $_POST Werte im übrigen auch auf einfachste Weise überprüfen:

PHP:
$error = 0;
foreach($_POST as $key => $value) {
	if (!isset($_POST[$key]) { $error++; };
}
if ($error == 0) {
	// SQL Daten
}
else {
	echo 'es wurden nicht alle Formularfelder ausgefüllt!';
}
 
Zuletzt bearbeitet:
Jetzt funktioniert es, hatte wohl einen kleinen Denkfehler drin! Vielen Dank!!
 
Ist das eine öffentliche Website? Dann solltest du dich schleunigst zunächst dazu einlesen: SQL-Injection

Sonst hast du bald andere, schwerwiegendere Probleme ;)
 
coldcut schrieb:
Ist das eine öffentliche Website? Dann solltest du dich schleunigst zunächst dazu einlesen: SQL-Injection

Sonst hast du bald andere, schwerwiegendere Probleme ;)

Da hast du recht, könnte er dann aber auch direkt mit in der foreach schleife tun:

PHP:
$error = 0;
foreach($_POST as $key => $value) {
	if (!isset($_POST[$key]) { $error++; };
	else {$_POST[$key] = mysql_real_escape_string($value);}
}
if ($error == 0) {
	// SQL Daten
}
else {
	echo 'es wurden nicht alle Formularfelder ausgefüllt!';
}

Und damit der TE auch weiß was da passiert: mysql_real_escape_string
 

Ähnliche Themen

Antworten
18
Aufrufe
1.471
mambokurt
M
Antworten
10
Aufrufe
1.141
H
Antworten
8
Aufrufe
2.815
kling1
K
Zurück
Oben