Toon posts:

[PHP-MYSQL] register met username check

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben dus bezig met een login database je en ik wil voorkomen dat er dubbel kan worden aangemeld. Ik heb dus wat zitten speuren en c&p. ben tot dit gekomen:
PHP:
1
<?<html><body><?phpif ($submit) {  $db = mysql_connect("localhost", "xxx");  mysql_select_db("xxx",$db);  $check = mysql_numrows(mysql_query("SELECT id FROM users WHERE name='$name'"));              if ($check>="true") {               echo "sorry deze gebruikers naam bestaat al" and die( "Unable to select database");            }             else {   $sql = "INSERT INTO users (name,pass,email) VALUES ('$name','$pass','$email')";  $result = mysql_query($sql);  echo "Thank you! Information entered.\n";}} else{?>  <form method="post" action="<?php echo $PHP_SELF?>">  Username:<input type="Text" name="name"><br>  Password:<input type="Text" name="pass"><br>  Email:<input type="Text" name="email"><br>  <input type="Submit" name="submit" value="Enter information">  </form>  <?php}  ?></body></html>?>

ik krijg alleen nu de volgende fout:

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /mnt/register.php on line 9

wat doe ik fout?
tabel=users
row=name

Verwijderd

MYSQL_NUM_ROWS :? En ik denk ook niet dat die een boolean teruggeeft

edit:

Er klopt echt geen hout van je code...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je hebt toch wel een unique key/index op je username he?
Dan krijg je ook nooit per ongeluk duplicaten.
en je query gaat fout, anders krijg je geen fout resultset binnen.

Controleer of ie wel een waarde voor $name krijgt, etc etc

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

or die(mysql_error())

Doet iets met Cloud (MS/IBM)


  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 19-08 14:53
Ik heb een paar punten aan te merken:
  • Tegenwoordig is het mysql_num_rows() i.p.v. mysql_numrows().
  • Probeer de mysql_num_rows() en de mysql_query() op een aparte regel te zetten.
  • Controleer je query. Zet er 'or die(mysql_error())' achter.
  • if($check >= "true")
    Hier klopt echt helemaal niks van. Als $check groter is dan de tekst "true"? Doe gewoon: if($check).
  • ... and die('...');
    Hiervoor is and niet bedoeld. Start op een nieuwe regel met een nieuw statement.
Succes! :)

Verwijderd

Topicstarter
bedankt, het werkt nu, dus zo rot is die code toch niet?
PHP:
1
<?<html><body><?phpif ($submit) {  $db = mysql_connect("localhost", "*");  mysql_select_db("*",$db);  $check = mysql_num_rows(mysql_query("SELECT name FROM users WHERE name='$name'"));  if ($check>=1) {    echo "sorry deze gebruikers naam bestaat al";   } else {    $sql = "INSERT INTO users (name,pass,email) VALUES ('$name','$pass','$email')";    $result = mysql_query($sql);    echo "Thank you! Information entered.\n";  }} else {?><form method="post" action="<?php echo $PHP_SELF?>">Username:<input type="Text" name="name"><br>Password:<input type="Text" name="pass"><br>Email:<input type="Text" name="email"><br><input type="Submit" name="submit" value="Enter information"></form><?php}  ?></body></html>?>

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je toch wilt tellen kan je ook gewoon een COUNT doen:
code:
1
SELECT COUNT(*) FROM users WHERE name='$name'

Het hele num_rows gebeuren is dan niet nodig: je haalt gewoon het resultaat uit je query.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 00:59 schreef mbravenboer het volgende:
Als je toch wilt tellen kan je ook gewoon een COUNT doen:
code:
1
SELECT COUNT(*) FROM users WHERE name='$name'

Het hele num_rows gebeuren is dan niet nodig: je haalt gewoon het resultaat uit je query.
ik heb ik gezich heel weinig kennis hoor van dit soort zaken maar als ik ff logisch redeneer dan klopt dit niet.

als ik ga tellen hoeveel users er zijn kom ik altijd boven de 0 uit. toch? dan zou ik dus altijd de melding krijgen dat de user al bestaat, toch?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dutchceasar: als ik ga tellen hoeveel users er zijn kom ik altijd boven de 0 uit.
Je telt niet hoeveel users er zijn, maar hoeveel users er aan de gestelde voorwaarde voldoen. Deze voorwaarde is exact hetzelfde als de voorwaarde in je oude query. Je doet de num_rows die jij in PHP doet nu in feite al in SQL.

Omdat MySQL nu niet echte resultaten op hoeft te leveren, maar simpelweg een count moet doen, kan de query veel efficienter uitgevoerd worden. Het is even de vraag of MySQL dit ook doet, maar het kan haast alleen maar een betere performance opleveren dan de code die je nu hebt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
oke, dankjewel, wist ik niet. zoals ik al zei, ik ben d'r nog niet zo goed in. :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dutchceasar: zoals ik al zei, ik ben d'r nog niet zo goed in. :)
Iedereen moet ergens beginnen ;) .

Als je serieus met SQL aan de slag gaat is het echter wel verstandig om een goede tutorial door te nemen of een boek te kopen. Het is belangrijk dat je de concepten van SQL een beetje door krijgt, want anders blijf je aanmodderen en gokken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
blaat :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op dinsdag 16 juli 2002 00:52 schreef Dutchceasar het volgende:
bedankt, het werkt nu, dus zo rot is die code toch niet?
Ik heb ff de vrijheid genomen om je post aan te passen (ff de enters er tussen gezet die topix weg toverd..

Maar van dit zinnetje krijg ik altijd enorme jeuk...

Het werkt mischien wel, maar je code is nog steeds rot. En dat terwijl de werkelijke oplossing al tijden terug gegeven is.

Gewoon een unieke constraint aanmaken op username. Vervolgens na het inserten kijken of er niet een 'dubbele entry voor veld x' foutmelding is en klaar. Ten eerste is dat wat sneller, en zoals jij het nu heb is het nog steeds mogelijk dat 2 mensen met dezelfde naam registreren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1