malte: Problem mit einer DB Abfrage

Hi,
der code den ihr unten seht soll folgendes bewirken;
es sollen alle usernamen aus der db in einem Array gespeicher werden. dann will ich den user der sich jetzt anmeldet mit den usernamen vergleichen die in der Db stehen. wenn sie gleich sind soll ein Fehler ausgeben werden. nur er gibt gar nichts aus:

  
  
include ('verbindung.php');  
$username_db = array();  
$sql = "SELECT username FROM user";  
$result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);  
while ($user = mysql_fetch_array($result)) {  
$username_db = $user["username"];  
}  
if($username == $username_db) $fehler[] = "Der Benutzername ist bereits vergeben. Bitte wählen sie einen anderen.";  
  

  1. hi,

    es sollen alle usernamen aus der db in einem Array gespeicher werden. dann will ich den user der sich jetzt anmeldet mit den usernamen vergleichen die in der Db stehen. wenn sie gleich sind soll ein Fehler ausgeben werden.

    wozu denn dieser unnötige aufwand?
    frage ab, ob es einen datensatz mit diesem usernamen schon in der DB gibt (WHERE-klausel), und werte das ergebnis aus - kommt ein datensatz zurück, ist er bereits vorhanden, andernfalls nicht.
    dabei hilft dir nach der abfrage mysql_num_rows().

    while ($user = mysql_fetch_array($result)) {
    $username_db = $user["username"];

    hiermit überschreibst du dir dein array $username_db wieder. es steht in $username_db am ende der schleife also nur noch der username, der als letzter von der Db geliefert wurde.

    if($username == $username_db)

    diese abfrage könnte jetzt unter dem umstand noch zutreffen, dass der neue username gleich dem letzten von der DB kommenden war.

    wenn $username_db aber wirklich, wie eigentlich beabsichtigt, ein array wäre, wäre diese abfrage unsinn - du kannst nicht einfach so einen string mit einem array vergleichen.
    da wäre dann in_array() angebracht - aber siehe oben, dieser ansatz ist sowieso unperformanter unsinn.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi,

      ich habe es so gemacht, ist es so richtig?

        
      $query ="SELECT username FROM user WHERE username = '".$username."'";  
      $result = mysql_query($query) OR die(mysql_error());  
        
      if (mysql_num_rows ($result) > 0) $fehler[] ="Der Benutzername gibt es bereits. Bitte wählen sie einen neuen";  
        
      
      
      1. Hi!

        ich habe es so gemacht, ist es so richtig?

        Probiers doch einfach aus ;-)

        $query ="SELECT username FROM user WHERE username = '".$username."'";
        $result = mysql_query($query) OR die(mysql_error());

        if (mysql_num_rows ($result) > 0) $fehler[] ="Der Benutzername gibt es bereits. Bitte wählen sie einen neuen";

          
        Ja, so sollte es stimmen. Aber denke daran, dass $username vor dem Query entsprechend behandelt werden sollte, um eventuellen Problemen vorzubeugen ([mysql_real_escape_string()](http://de.php.net/mysql_real_escape_string)).  
          
        Grüße,  
        Fabian St.
        
        -- 
        Selfcode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%28+ss%3A%29+de%3A%3E+js%3A%7C+ch%3A%3F+mo%3A%29+zu%3A%29)