Malte: Prüfen ob Username vergeben ist...

Hi,

ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
Dazu habe ich eine Auslese aus der DB:

  
<?  
$sql = "SELECT username FROM user";  
  
$result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);  
  
while ($usernames = mysql_fetch_array($result)) {  
  
$user[] = $usernames["user"];  
  
}  
?>  

Ok nach der Auslese wollte ich es so überprüfen:

  
<?  
if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";  
?>  

Bekomme einen Fatal Error wieder
Könnt ihr mir sagen, wie ich es machen kann?

  1. Hi,

    Bekomme einen Fatal Error wieder

    und wie sieht der aus?

    MfG

  2. Lieber Malte,

    was soll denn

    if($username == $user[])

    sein?

    Die Schreibweise $user[] enthält keinen Index, über den ein Element aus Deinem Array $user eindeutig bestimmt wäre! Damit kann PHP nicht sagen, ob die if-Bedingung nun erfüllt wird, oder nicht.

    $fehler[] = ...

    Hier weist Du dem Array $fehler an der nächsthöheren freien Indexposition ein neues Element zu. Das ist in PHP eine gültige Schreibweise beim "Erweitern" eines Arrays, die aber wegen ihrer "Faulheit" zu Komplikationen führen kann, wenn es im Array nicht-numerische Indizes gibt.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

  3. Hi,

    ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
    Dazu habe ich eine Auslese aus der DB:
    $sql = "SELECT username FROM user";

    Du liest also alle Usernamen aus der DB aus?

    Warum hängst Du nicht einfach die Abfrage nach dem Usernamen an (" WHERE username = '".mysql_real_escape_string($der_neue_username)."'" oder ähnliches)
    und prüfst dann nur noch, ob die Anzahl der gefundenen Datensätze (mysql_num_rows) Null ist oder was anderes?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. n'abend,

    damit ich deinen code richtig verstehe....

    <?
    $sql = "SELECT username FROM user";

    du liest erst mal alle usernamen aus der tabelle user

    $result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);

    while ($usernames = mysql_fetch_array($result)) {

    $user[] = $usernames["user"];

    dann schiebst du alle usernamen in ein array

    }
    ?>

    
    >   
    >   
    > Ok nach der Auslese wollte ich es so überprüfen:  
    >   
    > ~~~php
      
    
    > <?  
    > if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";  
    
    und dann prüfst du irgendwas, was irgendwie... wie... häh?  
    
    > ?>  
    > 
    
    

    Bekomme einen Fatal Error wieder
    Könnt ihr mir sagen, wie ich es machen kann?

    dass sich der PHP-Parser nicht gleich erhängt hat ist ein wunder...

    würde es mal mit

      
    $res = mysql_fetch_row(mysql_query('SELECT COUNT(`username`) FROM `user` WHERE `username` = \''.$username.'\''));  
    // nicht vergessen $username zu escapen, etc.  
      
    if($res[0] > 0) $fehler = 'User existiert bereits';  
    
    

    versuchen

    weiterhin schönen abend...

    --
    wer braucht schon großbuchstaben?
  5. Hi!

    ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
    Dazu habe ich eine Auslese aus der DB:

    <?
    $sql = "SELECT username FROM user";

    $result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);

    while ($usernames = mysql_fetch_array($result)) {

    $user[] = $usernames["user"];

    }
    ?>

      
    Mache das ganze am besten so:  
      
    ~~~php
      
      
    $sql = "SELECT  
                   COUNT(*) as hits  
            FROM  
                   user  
            WHERE  
                   username = '".mysql_real_escape_string($username)."'";  
      
    $resource = mysql_query($sql);  
    $result = mysql_fetch_assoc($resource);  
    if($result['hits'] == 0) {  
        echo 'Name existiert noch nicht';  
    } else {  
        echo 'Name existiert!';  
    }  
      
    
    

    Dass das, was du bisher gepostet hast, wirklich Unsinn ist, erwähne ich hier nur am Rande. Du solltest dir dringend im PHP-Manual anschauen, was eine Konstruktion wie $array[] bewirkt: http://de.php.net/manual/de/language.types.array.php.

    Die noch benötigte Fehlerbehandlung für das obige Beispiel solltest du dir noch selber bauen.

    Grüße,
    Fabian St.

  6. $sql = "SELECT username FROM user";

    if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";
    ?>

    Bekomme einen Fatal Error wieder

    1. Der fatal error kommt wegen dem $user[]
       du kannst nur

      
    for($i=0; $i < count($user); $i++)  
    {  
     if($username == $user[$i]) $fehler[] ="Der Username...";  
    }  
    
    

    schreiben

    2. Du kannst es viel einfacher machen:

      
    $query = mysql_query("SELECT username FROM user WHERE username='$gewuenschtername'", $db)  
    if(mysql_num_rows($query) > 0) $fehler = "vergeben blabla";  
    
    

    mysql_num_rows() liefert die anzahl der datensätze zurück, wenn es den username schon gibt, gibt es einen datensatz (nämlich den, in dem username='gewünschtername'), ansonsten gibt es keinen.

    (falls du dich mit mysql nicht gut auskennst: mit WHERE gibt mysql nur die datensätze zurück, in denen die nachfolgenden bedingungen erfüllt sind)

    1. Hallo Marian!

      du kannst nur

      for($i=0; $i < count($user); $i++)
      {
      if($username == $user[$i]) $fehler[] ="Der Username...";
      }

      
      >    schreiben  
        
      Warum eine Schleife bemühen?  
        
      `if(in_array($username, $user)) echo "Benutzername existiert bereits";`{:.language-php}  
        
      ℆, ℒacℎgas
      
      -- 
      Bei der intendierten Realisierung der linguistischen Simplifizierung  
      des regionalen Idioms resultiert die Evidenz der Opportunität extrem  
      apparent, den elaborierten und quantitativ opulenten Usus nicht assi-  
      milierter Xenologien konsequent zu eliminieren!
      
      1. Warum eine Schleife bemühen?

        if(in_array($username, $user)) echo "Benutzername existiert bereits";

        Mit array-funktionen kenn ich mich nicht so aus, von in_array hab ich schon gehört, aber trotzdem danke für den tipp, aber das mit WHERE ist trotzdem einfacher!

        Was heißt eigentlich das mit der intendenten realisierung?

        1. Hi

          WHERE ist trotzdem einfacher!

          vorallem einfacher für sql-inserts

          MfG