Post oder GET überprüfen

$mail wird aus der Datenbank geholt und zwar so:

PHP:
//  Überprüfen ob die Email Adresse bereits verwendet wird.
   $mail_data = "SELECT * FROM benutzer where benutzer_email = '".$_REQUEST['benutzer_email']."'";
   $result_mail_data = mysql_query($mail_data) or die(mysql_error());
   $mail = mysql_fetch_array($result_mail_data);

Gruss
 
Dann könntest Du die Zuweisung zu $mail weglassen und wie folgt prüfen:
PHP:
if($_REQUEST['benutzer_passwort'] != $_REQUEST['benutzer_passwort_2']
        && mysql_num_rows($result_mail_data)>0) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=pw+email");
} elseif (mysql_num_rows($result_mail_data)>0) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=email");
} elseif ($_REQUEST['benutzer_passwort']
        != $_REQUEST['benutzer_passwort_2']) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=pw");
} else {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/ok.php");
}
Du könntest Dir damit mögliche Fehlermeldungen ersparen, die daraus resultieren, dass es keinen Eintrag mit der E-Mail-Adresse gibt.

Eine andere Variante wäre, die Fehler vorher zu bestimmen (ich baue auch gleich mal Prüfung auf leere Felder ein):
PHP:
$mailError=(empty($_REQUEST['benutzer_email'])
        || (mysql_num_rows($result_mail_data)>0));
        
$passError=(empty($_REQUEST['benutzer_passwort'])
        || ($_REQUEST['benutzer_passwort']
            != $_REQUEST['benutzer_passwort_2']));
            
if($passError && $mailError) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=pw+email");
} elseif ($mailError) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=email");
} elseif ($passError) {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/anmeldung.php?fehler=pw");
} else {
    header ("Location: http://www.deineDomain.tld/"
        ."verzeichnis/ok.php");
}
Eine weitere Variante wäre die von Gumbo angesprochene Verarbeitung in einer Datei:
PHP:
//HTML-Head
<?
$errors=array();
if (isset($_POST['nameDesSubmitButton'])) {
    //Formular wurde abgesendet, Fehlerprüfung folgt
    if (empty($_REQUEST['benutzer_email'])) {
        $errors[] = "Du musst eine E-Mail-Adresse angeben.";
    }
    if (mysql_num_rows($result_mail_data)>0) {
        $errors[] = "Es existiert bereits ein User mit dieser E-Mail.";
    }
    if (empty($_REQUEST['benutzer_passwort'])) {
        $errors[] = "Du musst ein Passwort angeben.";
    }
    if ($_REQUEST['benutzer_passwort']
            != $_REQUEST['benutzer_passwort_2']) {
        $errors[] = "Die angegebenen Passwörter müssen identisch sein.";
    }
    // beliebige weitere Fehlerprüfungen

    if (count($errors)>0) {
        //Es gibt Fehler, diese werden ausgegeben
        echo "<div class=\"error\"><p>"
            .implode("</p><p>",$errors)
            ."</p></div>";
    } else {
        //Alles ist gut
        //Formular verarbeiten
        //Daten eintragen
        echo "Danke für Deine Anmeldung.";
    }
}
if (!isset($_POST['nameDesSubmitButton'])
        || count($errors)>0) {
    //Formular ausgeben
    //Beispiel (mit wiedereintragen der Werte)
    //Sollte bei PW unterlassen werden
    echo '<input type="text" name="benutzer_email" value="'
        .((isset($_REQUEST['benutzer_email']))
            ?$_REQUEST['benutzer_email']:'')
        .'">';
}
?>
//HTML-Foot

Gruß hpvw
 
Zuletzt bearbeitet:
vielen Dank

Leider bekomme ich bei dem Code 2+3 die Fehlermeldung:

Fatal error: Can't use function return value in write context in www\cms\anmeldung_form.php on line 16

Was könnte das sein ?
 
Die empty()-Funktion kann nur auf Variablen, nicht aber auf Ausdrücke – also auch nicht auf Rückgabewerte einer Funktion – angewandt werden.
 
Ups, sorry, [phpf]empty[/phpf] erwartet zwingend eine Variable und nicht wie hier das Ergebnis einer Funktion. Der Fehler passiert mir immer wieder :-(
NImm also das [phpf]trim[/phpf] und die zugehörigen Klammern raus.
Ich mach mich oben mal ans editieren.

Gruß hpvw
 
Wieso vergleichst du nicht den Rückgabewert der trim()-Funktion mit einer leeren Zeichenkette?

Übrigens solltest du auch beachten, welche Werte die empty()-Funktion alles als „leer“ einstuft (s. PHP Cheat Sheet).
 
Gumbo hat gesagt.:
Wieso vergleichst du nicht den Rückgabewert der trim()-Funktion mit einer leeren Zeichenkette?
Wie jedesmal dachte ich, ich könnte eine Oder-Verknüpfung sparen. Wie jedesmal mal funktioniert das nicht. Und wie jedesmal lande ich am Ende bei der Lösung, die Du vorschlägst (und prüfe so, dass ich keine nicht gesetzte Variable anspreche):
PHP:
if (!isset($var)||trim($var)==="") {
    // nicht gesetzt oder leerer String
}
Und nächstes mal werde ich denselben Weg des Lernens gehen :rolleyes:

Gumbo hat gesagt.:
Übrigens solltest du auch beachten, welche Werte die empty()-Funktion alles als „leer“ einstuft (s. PHP Cheat Sheet).
Danke für den Link. Die schöne Übersicht habe ich jetzt in den Lesezeichen.

Gruß hpvw
 
Zurück