Darkseth: Emailüberprüfung funktioniert nicht wie gewollt

Guten Tag und Hallo

Ich habe das folgende Problem, ich will in ein Registrierungsformular eine Abfrage einbauen ob die eingegeben Emailadresse bereits existriert, Vesucht habe ich das So:

case "4":  
		$name = FilterText($_POST['bean_name']);  
		$email = FilterText($_POST['bean_email']);  
		$email2 = FilterText($_POST['bean_retypedEmail']);  
		$pass1 = FilterText($_POST['bean_password']);  
		$pass2 = FilterText($_POST['bean_retypedPassword']);  
  
		$filter = preg_replace("/[^a-z\d\-=\?!@:\.]/i", "", $name);  
		$email_check = preg_match("/^[a-z0-9_\.-]+@([a-z0-9]+([\-]+[a-z0-9]+)*\.)+[a-z]{2,7}$/i", $email);  
		  
		$tmp = mysql_query("SELECT id FROM users WHERE username = '".$name."' LIMIT 1") or die(mysql_error());  
		  
		$tmp = mysql_num_rows($tmp);  
    $first = substr($name, 0, 4);  
    $tmp1 = mysql_query("SELECT mail FROM users WHERE mail = '".$mail."' LIMIT 1") or die(mysql_error());  
    $tmp1 = mysql_num_rows($tmp1);  
		// NAME CHECK  
  
      		if(strnatcasecmp($first,"MOD-") == false) {  
			$errors = "Dieser Username ist ungültig";  
		}elseif($tmp > 0){  
			$errors = "Der Name ist leider vergeben!";  
		}elseif($filter !== $name){  
			$errors = "Dieser Username ist ungültig.";  
		}elseif(strlen($name) > 12){  
			$errors = "Dieser Username ist zulang.</p></div>";  
  
		// E-MAIL CHECK  
  
		}elseif($email_check !== 1){  
			$errors = "Ungültige E-Mail Adresse";  
		}elseif($tmp1 > 0){  
			$errors = "Diese Email ist bereits vergeben!";	  
		}elseif(strlen($email) < 6){  
			$errors = "Ungültige E-Mail Adresse";  
		}elseif($email !== $email2){  
			$errors = "Die Email-Adressen stimmen nicht überein";  

Ich habe erstmal Grundsätzlich versucht diese Überprüfung aus der Namensüberprüfung abzuleiten, aber scheinbar funktioniert das nicht korrekt.

MfG Darkseth

--

--- Wer Rechtsschreibfehler findet, darf sie behalten ---
  1. Hi!

    Ich habe das folgende Problem, ich will in ein Registrierungsformular eine Abfrage einbauen ob die eingegeben Emailadresse bereits existriert,

    Das ist grundsätzlich ungünstig. Ich nehme mal an, dass du sie nach der Prüfung zu den anderen eintragen willst. Was ist aber, wenn sich jemand in dem Multitask-System, wie es ein Webserver darstellt, zwischen der Abfrage und dem Eintragen reindrängelt? TOUCTOU-Fehler. Besser ist, einen Unique-Index auf die Spalte zu legen und einfach einzutragen versuchen. Gab es die Adresse schon, gibt es einen Unique-Constraint-Fehler. Gab es die Adresse noch nicht, ist das Einfügen erfolgreich oder wird aus einem anderen Grund abgebrochen. Und wenn du nun dieses bessere Prinzip verfolgen möchtest, musst du sowieso alles umbauen und dein eigentliches Problem lös(ch)t sich von selbst.

      $name = FilterText($\_POST['bean\_name']);  
      $tmp = mysql\_query("SELECT id FROM users WHERE username = '".$name."' LIMIT 1") or die(mysql\_error());  
    

    Was genau macht denn FilterText() und warum verzichtest du anschließend auf eine kontextgerechte Behandlung?

    "or die()" ist üblicherweise keine Fehlerbehandlung sondern Mist. Die Ausgabe von Systeminformationen an Anwender, die das weder was angeht noch dass sie damit was anfangen können/sollen, ist noch dazu unsinnig bis angreiferfreundlich. Reagiere auf Fehler besser, indem du einen alternativen Programmverlauf einschlägst, in dem zum einen die Ausgabe ein vollständiges Dokument erzeugt, und in dem dem Anwender eine Alternative angeboten wird, wie er doch noch zum Ziel kommt, ohne zur Konkurrenz ausweichen zu müssen.

    Ich habe erstmal Grundsätzlich versucht diese Überprüfung aus der Namensüberprüfung abzuleiten, aber scheinbar funktioniert das nicht korrekt.

    Dann kommt nun das Debugging ins Spiel. Prüfe zum Beispiel mit Kontrollausgaben den Ablauf und ermittle, an welcher Stelle Wunsch und Wirklichkeit nicht mehr übereinstimmen. Wenn du dir dann das Verhalten der eingegrenzten Stelle nicht erklären kannst, dann komm wieder her, aber bitte mit einem auf das wesentlichste zusammengekürzte Beispiel, das auch nachvollziehbar ist. Dazu gehört üblicherweise eine Beschreibung, welche Werte du einkippst und eine Offenlegung von selbstgeschriebenen Funktionen, sofern sie für die Nachstellung des Fehlers mit minimalstem Code relevant sind.

    Lo!