Mailinglisten-Archive |
Hallo Tobias, danke dafür, daß du alles so schön aufgelistet hast. Ich habe es kurz bevor ich deine Mail empfangen habe geschafft. Für alle anderen liste ich hier den gesamten Code auf. <schnipp> function newUser($user,$password) { // Globale Variablen global $mysql_host, $mysql_user, $mysql_password, $db_name, $usertable_name; // Konnektieren zum Mysql-Server $mysql_id = mysql_connect($mysql_host, $mysql_user, $mysql_password); if($mysql_id==0) { echo mysql_errno.": ".mysql_error; } mysql_select_db($db_name); // Überprüfen, ob User schon besteht $select = mysql_db_query($db_name, "SELECT user FROM $usertable_name WHERE user LIKE '$user'"); $data = mysql_fetch_row($select); if($data[0]==$user) { echo "Der User ".$user." existiert schon."; } else { echo "Herzlich Willkommen ".$user."!"; // Ertsellen eines neuen User-Profiles mysql_query("INSERT INTO $usertable_name (user,password) VALUES ('$user','$password')"); } mysql_close($mysql_id); } <schnapp> Gruß, Rudolf Koch Tobias Ratschiller wrote: > > $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 -- ** Durchgehend geöffnet: http://www.php-center.de ** Die PHP-Liste: mailto:php_(at)_infosoc.uni-koeln.de http://infosoc.uni-koeln.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive