Registrierung - Überprüfung klappt nicht

Voltex

Mitglied
Hallo zusammen,
also, ich bin relativ neu hier und hab direkt mal ne Frage :D

Ich hab, dank diesem Forum, ein lauffähiges Login Script. hier der Link dazu:
http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html

Dazu wollte ich mir nun ne Registrierung programmieren. Funktiuniert auch soweit.. also die daten werden in der DB abgelegt. Wenn ich jetzt aber vorher überprüfen will, ob beispielsweise der Username schon vergeben ist, dann klappts nicht.

Nebenbeibemerkt: ich hab das Loginscript ein wenig geändert und auf meine bedürfnisse angepasst.

Hier also der Code von der registrierungsdatei

register2.php
PHP:
  <?php  
// Definition der Benutzer  
$value["username"] = $_POST["username"];  
$value["password"] = $_POST["password"];  
$value["email"] = $_POST["email"];  
  


// Sie können an dieser Stelle beliebig viele Benutzer anlegen.  
// Achten Sie dabei nur auf die Fortführung der Nummer.  

// Aufbau der Datenbankverbindung  
$connectionid  = mysql_connect ("localhost", "root", "");  
if (!mysql_select_db ("cmsdb", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}    
                                                                 
 
{       //Überprüfung, existiert Name oder eMail bereits?  
          $ask  = "SELECT 
                  (username, email) 
                  FROM
                  tbl_user
                  WHERE
                  username = ".$value["username"]."
                  OR
                  email = ".$value["email"]."";
          
          mysql_query($ask);
          
          $num_rows = mysql_num_rows($ask, $connectionid);
      
  if ($num_rows > 0)
  {
        header ("Location: register.php?inuse=1");
  }

  else
  {// SQL-Anweisung erstellen  
  $sql = "INSERT INTO ". 
    "tbl_user (username, password, email) ". 
  "VALUES ('".$value["username"]."', '". 
                       md5 ($value["password"])."', '". 
                       $value["email"]."')";  
  mysql_query ($sql);  
  }
  
  if (mysql_affected_rows ($connectionid) > 0)  
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>

Kann mir jemand sagen, woran das liegt? Danke schonmal im Vorraus.

Grüße,
Voltex
 
Und was genau klappt nicht? Denn klappt nicht kann alles bedeuten.
Funktioniert die Datenbankabfrage nicht? Oder das in-die-Datenbank schreiben? Oder was ganz anderes? Was sagt mysql_error?
Fragen über Fragen :)
 
also,

die daten werden wohl in die Datenbank geschrieben. Aber es wird halt nicht überprüft, ob der Benutzer bereits existiert...

Beispiel: Ich registriere um 9 Uhr einen Benutzer, nennen wir ihn "user"

dann registriere ich um 10 Uhr wieder einen benutzer, auch mit dem nickname "user"

eigentlich sollte dann der fehler ausgegeben werden "Benutzername bereits in Verwendung"

also schein die if-abfrage

PHP:
if ($num_rows > 0)

einfach übersprungen zu werden.
 
Zur Fehlersuche solltest du dir angewöhnen entsprechende Funktionen zu nutzen.
In deinem Fall wäre dies:
PHP:
if( !mysql_query($ask) )
{
    echo mysql_error();
}
if( !$num_rows = mysql_num_rows($ask) )
{
    echo mysql_error();
}
Ausserdem vielleicht mal $num_rows ausgeben lassen:
PHP:
echo $num_rows;

Die Fehlermeldung die da dann erscheint, postest du bitte hier.
 
Fehlermeldung ist folgende:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR email =' at line 7You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR email =' at line 7
 
Schreib das mal so:
PHP:
$ask = 'SELECT
            `username`,`email`
        FROM
            `tbl_user`
        WHERE
            `username` = "' .$value['username']. '"
        OR
            `email` = "' .$value['email']. '"
        ';
 
Jetzt kommt der SQL error zwar nichtmehr, aber die überprüfung klappt dennoch nicht...

wieder das beispiel: um 9 uhr einen "user" registrieren, klappt. registriere ich um 10 Uhr einen User, klappt das auch, obwohl ein "user" bereits in der datenbank vorhanden ist.
 
An den Anfang deiner Datei einfügen:
PHP:
 <?php  
 error_reporting( E_ALL | E_STRICT );

Und schreib mal vor der Klammer ein else:
Code:
else{       //Überprüfung, existiert Name oder eMail bereits?
 
Hab ich gemacht, leider immernoch das gleiche ergebnis... und auch keine Ausgabe von irgendwelchen Errors

nochmal als kleine Gedankenstütze: Aktuell sieht der Code so aus:

PHP:
<?php  
            error_reporting( E_ALL | E_STRICT );
// Definition der Benutzer  
$value["username"] = $_POST["username"];  
$value["password"] = $_POST["password"];  
$value["email"] = $_POST["email"];  
  


// Sie können an dieser Stelle beliebig viele Benutzer anlegen.  
// Achten Sie dabei nur auf die Fortführung der Nummer.  

// Aufbau der Datenbankverbindung  
$connectionid  = mysql_connect ("localhost", "root", "");  
if (!mysql_select_db ("cmsdb", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}    
                                                                 

{       //Überprüfung, existiert Name oder eMail bereits?  
          $ask = 'SELECT 
            `username`,`email` 
        FROM 
            `tbl_user` 
        WHERE 
            `username` = "' .$value['username']. '" 
        OR 
            `email` = "' .$value['email']. '" 
        ';
          
          mysql_query($ask);
  
      $num_rows = mysql_num_rows($ask, $connectionid);
      
  if ($num_rows > 0)
  {
        header ("Location: register.php?inuse=1");
  }

  else
  {// SQL-Anweisung erstellen  
  $sql = "INSERT INTO ". 
    "tbl_user (username, password, email) ". 
  "VALUES ('".$value["username"]."', '". 
                       md5 ($value["password"])."', '". 
                       $value["email"]."')";  
  mysql_query ($sql);  
  }
  
  if (mysql_affected_rows ($connectionid) > 0)  
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>
 
Dann wende var_dump auf $value an, und poste das Ergebnis:
PHP:
$value["username"] = $_POST["username"];  
$value["password"] = $_POST["password"];  
$value["email"] = $_POST["email"];  
var_dump( $value );

edit: Das else fehlt noch:
PHP:
{       //Überprüfung, existiert Name oder eMail bereits?
PHP:
else{       //Überprüfung, existiert Name oder eMail bereits?

Aber schreiben tut es in die Datenbank korrekt?
 
Zuletzt bearbeitet:
Zurück