If-Abfrage funktioniert nicht so, wie ich will!

Danesta

Grünschnabel
Tach :)

Ich bin nen absoluter Neuling im Bereich PHP, bzw. lerne es halt zur Zeit und hab ein Problem mit einer If-Abfrage... die nicht so will wie ich will.

Es wird ne Verbindung zur Datenbank hergestellt und in der Datei register.php ist halt ein Formular, mit dem man sich registrieren kann.
Natürlich möchte ich nicht, dass es doppelte und dreifache Nicknames in der Datenbank gibt und hab halt deshalb eine If-Abfrage gemacht... das gleiche gilt für die E-Mail Adresse, bitte schön:

PHP:
	<?php

		$result = mysql_query("SELECT nickname FROM members");
		$result2 = mysql_query("SELECT email FROM members");
		
		if (isset($_POST['submit']) AND "Registrieren" == $_POST['submit']) {
	        if(!isset($_POST['nickname'], $_POST['email'], $_POST['email2'])) {
		        echo "<font color=\"#ff0000\">Bitte fülle alle Felder aus.</font><br /><br />";
		    }
		    elseif(trim($_POST['nickname']) == "") {
		        echo "<font color=\"#ff0000\">Bitte gib einen gültigen Spielernamen ein.</font><br /><br />";
		    }
			elseif(trim($_POST['nickname']) == "Spielername") {
			    echo "<font color=\"#ff0000\">Bitte gib einen gültigen Spielernamen ein.</font><br /><br />";
			}
			elseif(($_POST['nickname']) == $result) {
			    echo "<font color=\"#ff0000\">Dieser Spielername wird bereits verwendet.</font><br /><br />";
			}			
		    //elseif(!preg_match('/^\s+$/', trim($_POST['nickname']))) {
		    //    echo "Bitte gib einen gültigen Nickname ein.";
		    //}
		    elseif(!check_email_mx($_POST['email'])) {
		        echo "<font color=\"#ff0000\">Bitte gib eine gültige E-Mail Adresse ein.</font><br /><br />";
		    }
			elseif(trim($_POST['email']) == "name@server.de") {
			    echo "<font color=\"#ff0000\">Bitte gib eine gültige E-Mail Adresse ein.</font><br /><br />";
			}
		    elseif(trim($_POST['email']) != trim($_POST['email2'])) {
		        echo "<font color=\"#ff0000\">Bitte gib zwei identische E-Mail Adressen ein.</font><br /><br />";
			}
			elseif(($_POST['email']) == $result2) {
			    echo "<font color=\"#ff0000\">Diese E-Mail Adresse wird bereits verwendet.</font><br /><br />";
			}
	        else {
	            $sql = "INSERT INTO members
					        (nickname,password,email,code)
					    VALUES
					        ('".$_POST['nickname']."',MD5('".$password."'),'".$_POST['email']."','".$code."')";
			    mysql_query($sql) OR die(mysql_error());
			    echo "<font color=\"#ff0000\">Sie haben sich erfolgreich registriert.</font><br />";
				echo "<font color=\"#ff0000\">Ihr Passwort wurde an die angegebene E-Mail Adresse verschickt.</font><br /><br />";
mail($empfaenger, $betreff, $text, $from);
	        }
	    }
	?>

Er checkt einfach nicht ab, ob ein Spielername vorhanden ist und führt dann halt das aus, was in der If-Abfrage steht... :/
Hoffe mir kann wer helfen :>
 
Habs mir jetzt nicht besonders gut angeschaut :rolleyes: Naja eigentlich fast gar nicht ;-)
Aber könntest dein Projekt mal so probieren

Im gegensatz zu deiner Variante wäre hier das Formular und die Php-Page in einem -.-
Dann Prüfen wir zuerst ob dein Formular abgesendet wurde und in $submit gleich Registrieren ist -.- (hast du so gemacht ...)
Desweiteren prüfen wir so jeweils deine tollen Fragen -.- eMail etc. hab ich einfach mal von dir übernommen ...

Stimmt dort etwas nicht wird die Variable $mastersgruß auf 0 gesetzt und somit is se lehr -.- ansonsten ist sie mit 1 gefüllt und du kannst alles weiter verarbeiten ...

So was mich jetzt etwas unsicher macht ist warum du dies hier prüfst
if(!isset($_POST['nickname'], $_POST['email'], $_POST['email2'])) {
Habe dort jetzt mal empty eingefügt also prüfen wir ob die Felder leer sind ...

PHP:
<?php

        $result = mysql_query("SELECT nickname FROM members");
        $result2 = mysql_query("SELECT email FROM members");
        
        if (isset($_POST['submit']) AND "Registrieren" == $_POST['submit']) {

$mastersgruß = 1;

            if(empty($_POST['nickname']) or  empty($_POST['email'])  or  empty($_POST['email2'])) {
                echo "<font color=\"#ff0000\">Bitte fülle alle Felder aus.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(trim($_POST['nickname']) == "") {
                echo "<font color=\"#ff0000\">Bitte gib einen gültigen Spielernamen ein.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(trim($_POST['nickname']) == "Spielername") {
                echo "<font color=\"#ff0000\">Bitte gib einen gültigen Spielernamen ein.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(($_POST['nickname']) == $result) {
                echo "<font color=\"#ff0000\">Dieser Spielername wird bereits verwendet.</font><br /><br />";
            $mastersgruß = 0; 

            }            
            //elseif(!preg_match('/^\s+$/', trim($_POST['nickname']))) {
            //    echo "Bitte gib einen gültigen Nickname ein.";
            //}
            elseif(!check_email_mx($_POST['email'])) {
                echo "<font color=\"#ff0000\">Bitte gib eine gültige E-Mail Adresse ein.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(trim($_POST['email']) == "name@server.de") {
                echo "<font color=\"#ff0000\">Bitte gib eine gültige E-Mail Adresse ein.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(trim($_POST['email']) != trim($_POST['email2'])) {
                echo "<font color=\"#ff0000\">Bitte gib zwei identische E-Mail Adressen ein.</font><br /><br />";
            $mastersgruß = 0; 

            }
            elseif(($_POST['email']) == $result2) {
                echo "<font color=\"#ff0000\">Diese E-Mail Adresse wird bereits verwendet.</font><br /><br />";
            $mastersgruß = 0; 

            }
}

if($mastersgruß){ 

                $sql = "INSERT INTO members
                            (nickname,password,email,code)
                        VALUES
                            ('".$_POST['nickname']."',MD5('".$password."'),'".$_POST['email']."','".$code."')";
                mysql_query($sql) OR die(mysql_error());
                echo "<font color=\"#ff0000\">Sie haben sich erfolgreich registriert.</font><br />";
                echo "<font color=\"#ff0000\">Ihr Passwort wurde an die angegebene E-Mail Adresse verschickt.</font><br /><br />";
                mail($empfaenger, $betreff, $text, $from);

}else{
?>

// *.*.*.*.*.*.*.*. //<br>
// Formular ! //<br>
// *.*.*.*.*.*.*.*. //<br>

günny meints nur gut mit dir

<?php
}
?>
 
Zuletzt bearbeitet:
öhm das formular is auch in der register.php, nur hab ich das halt jetz net unbedingt mit reingeschrieben, weils ya net ums formular geht.. ^^
naja so wie du das machst, würd der dann dauernd ne 1 eintragen, eben weil die if-abfrage ya net wirklich funktioniert und dann wär ich wieder am anfang des problems...

speziell gehts mir jetz nur dadrum, dass die if-abfragen, die der mit $result oder $result2 vergleicht nicht funktionieren, er prüft nicht, ob der nickname oder die e-mail adresse in der datenbank vorhanden ist, er trägt sie einfach ein.
 
Du checkst ja auch garnicht, ob das eingegebene in der DB steht.

Wenn du das checken willst, musst du die Eingabe in dein Query mit einarbeiten, und dann prüfen, ob Ergebnisse gefunden werden:

Code:
$sql_mail=mysql_query('SELECT * FROM members WHERE email="'.trim($_POST['email']).'"');
if(mysql_num_rows($sql_mail)>1)die('email wird schon verwendet');

Du kannst die Spalten für Username und Mailadresse auch als UNIQUE deklarieren, dann ist es überhaupt nicht möglich, identische Werte in diese Felder einzutragen.
 
Zurück