Mailinglisten-Archive |
> > $id = mysql_db_query($db_name,"SELECT user FROM $usertable WHERE > > user=$user"); > > if ($id=0) { > > echo "Bitte wählen sie einen anderen Benutzernamen."; > > } else { > > newUser($user); } > > Ich habe vor ein paar Tagen ein ähnliche Probblem gehabt. > Versuchs mal mit > if ($id == true) { Zwei Fehler: 1) mysql_db_query(), mysql_query() und mysql() geben einen *Zeiger* auf das Resultat der Abfrage zurück, nicht das Resultat selbst. Schlägt die Abfrage aufgrund eines Syntax-Fehlers in der SQL-Syntax oder anderer Probleme (sollte MySQLd plötzlich gestorben sein, zum Beispiel) fehl, liefern diese Funktionen den Booleschen Wert false zurück (bzw. 0). Ansonsten geben sie irgendeine Zahl zurück, die in der Praxis unbedeutend ist. Das Resultat holt man dann mit Funktionen wie mysql_fetch_array(). 2) Strings müssen in der SQL-Query natürlich in Anführungszeichen stehen: WHERE USER = '$user' Fazit: Der Code sollte so aussehen: $id = mysql_db_query($db_name, "SELECT user FROM $usertable WHERE user='$user'") or die(mysql_error()); // [1] if (mysql_num_rows($id) != 0) { // [2] echo "Bitte wählen sie einen anderen Benutzernamen."; } else { newUser($user); } [1] Die Verknüpfung mit dem logischen OR ist eine nützliche Funktion zur Fehlerbehandlung. Da eine logische OR-Verknüpfung selbst dann den Wert "wahr" ergibt, wenn nur ein Teil der Verknüpfung wahr ist, wird der zweite Teil der Verknüpfung (das die(mysql_error())) nur dann ausgewertet, wenn der erste Teil den Wert "falsch" ergeben hat - also ein Fehler bei der SQL-Query aufgetreten ist. Liefert eine Funktion False im Falle eines Fehlers, sollte man das auch überprüfen. [2] mysql_num_rows() liefert die Anzahl der zurückgelieferten Zeilen. Mit freundlichen Grüßen, Tobias Ratschiller
php::bar PHP Wiki - Listenarchive