noget der tjekker om en row findes (brugere)

Tags:    php

hej. jeg har, til et bruger system, brug for at vide hvordan jeg tjekker om brugernavnet allerede er optaget, inden at en bruger opretter sig. jeg har lavet det her:

$username = $_POST['username'];

$sql = mysql_query("SELECT * FROM users WHERE screen='$username'");
$result = mysql_num_rows($sql);

if($result !=="0"){
echo '<script language="Javascript">
alert ("The user name is already taken...")
</script>';
}

Det der sker er, at lige meget om bruger navnet findes eller ej, så får man alerten "The user name is already taken..."

Jeg kan ikke lige se hvad jeg har gjort forkert/kan gøre. Og det håbede jeg at netop DU kunne!

- tak, Andy



5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
I stedet for at skrive ...$result !== "0" {... så prøv at skriv ...$result != "0" {... Altså kun med et lighedstegn.

Mvh.
Claus Thomsen



I stedet for at først undersøge om navnet findes hvorfor så ikke bare sætte navne kolonnen i tabellen til unik og så prøve at indsætte og teste om den kommer med fejl nummeret 1062?

mysql_query("INSERT SQL");
if(mysql_errno()!=0){
if(mysql_errno()==1062){
echo '<script language="Javascript">
alert ("The user name is already taken...")
</script>';
}else{
die(mysql_error());
}
}



okay :) Jeg kan desværre først teste det imorgen, min server er nede!



Det er ikke nødvendigt at hente alle oplysninger - du kan sagtens nøjes med kun fx id:
mysql_query("SELECT id FROM users WHERE screen='$username'");

Eller endnu bedre bare få MySQL til at lave countet, og udtrække det som det eneste felt i en enkelt record:
mysql_query("SELECT COUNT(*) FROM users WHERE screen='$username'");

Så er der én record, hvor første felt (dvs. array-plads 0) er antallet af eksisterende brugere med det pågældende brugernavn (så derfor skal du tjekke om dette er større end 0).



Jeg syntes at mikl.dk's var den smarteste! men siden han kommenterer uden point, så må i to andre vel bare få pointene!



t