login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Random lid is soms leeg.

Offline Martijn1989 - 26/09/2005 14:51
Avatar van Martijn1989PHP ver gevorderde Hallo, ik ben bezig met een stukje aan het maken, wat een random lid selecteert. Nu is het soms leeg, dat kan ook wel omdat sommige id's missen in de database.

Awel , na dit script denk je, er bestaat nog een kans ... dat die leeg is... raar die kans is : 0,00003125% , en ik heb hem nu al paar keer gezien, onwaarschijnlijk dus, dat het hier door komt.

  1. <?php
  2. include("config.php");
  3. $aantal = $config_aantal;
  4. $random = rand(1,$aantal);
  5.  
  6. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  7. $objectlid = mysql_fetch_object($selectlid);
  8. $aantallid = mysql_num_rows($selectlid);
  9. if($aantallid == 0) {
  10. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  11. $objectlid = mysql_fetch_object($selectlid);
  12. $aantallid = mysql_num_rows($selectlid);
  13. }if($aantallid == 0) {
  14. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  15. $objectlid = mysql_fetch_object($selectlid);
  16. $aantallid = mysql_num_rows($selectlid);
  17. }if($aantallid == 0) {
  18. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  19. $objectlid = mysql_fetch_object($selectlid);
  20. $aantallid = mysql_num_rows($selectlid);
  21. }if($aantallid == 0) {
  22. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  23. $objectlid = mysql_fetch_object($selectlid);
  24. $aantallid = mysql_num_rows($selectlid);
  25. }if($aantallid == 0) {
  26. $selectlid = mysql_query("SELECT * FROM leden WHERE id = $random");
  27. $objectlid = mysql_fetch_object($selectlid);
  28. $aantallid = mysql_num_rows($selectlid);
  29. } else {
  30. echo "<a href='/$objectlid->gebruikersnaam'>". $objectlid->gebruikersnaam ."</a><br>";
  31. if ($objectlid->avater == "") {
  32. echo "<img src='http://www.profielweb.nl/images/geen.jpg' border='0' width='100' height='100'><br><br>";
  33. } else {
  34. echo "<img src='http://www.profielweb.nl/ava/". $objectlid->avater ."' border='0'><br><br>";
  35. }
  36. echo "Hoi! me naam is ". $objectlid->naam .", en ik ben een ". $objectlid->geslacht .".
  37. Ik ben ". $objectlid->status ." op profielweb en ben vanaf ". $objectlid->datum ." lid.
  38. Ik ben geboren op : ". $objectlid->geboortedatum1 ."-". $objectlid->geboortedatum2 ."-". $objectlid->geboortedatum3 ." en ik heb ". $objectlid->credits ." Cr.
  39. Ik heb ". $objectlid->forumpost ." berichtjes op het forum geplaats en me profiel is ". $objectlid->bekeken ." keer bekeken.";
  40. if ($objectlid->hobbys == "") {
  41. echo "Ik heb geen hobby's";
  42. } else {
  43. echo "Me hobby's zijn ". $objectlid->hobbys .".";
  44. }
  45. }
  46. ?>


Hij slecteert, gewoon nog een keer als die leeg is.

12 antwoorden

Gesponsorde links
Offline nemesiskoen - 26/09/2005 15:08 (laatste wijziging 26/09/2005 15:14)
Avatar van nemesiskoen Gouden medaille

PHP expert
what about... while?

  1. <?php
  2. $aantallid = 0;
  3. $max = MySQL_result(MySQL_query("count (id) FROM leden"),0)
  4. while($aantallid==0) {
  5. $random = rand(0,$max);
  6. $selectlid = mysql_query("SELECT * FROM leden WHERE id = ". $random);
  7. $objectlid = mysql_fetch_object($selectlid);
  8. $aantallid = mysql_num_rows($selectlid);
  9. }
  10. ?>


------
  1. $objectlid->forumpost

Dit zou je eigenlijk niet mogen doen. Je zou beter het aantal posts tellen ipv telkens een veld te updaten.
Offline Martijn1989 - 26/09/2005 15:35
Avatar van Martijn1989 PHP ver gevorderde Ik heb nu dit :

  1. <?php
  2. include("config.php");
  3.  
  4. $aantallid = 0;
  5. $max = MySQL_result(MySQL_query("count (id) FROM leden"),0);
  6. while($aantallid == 0) {
  7. $random = rand(0,$max);
  8. $selectlid = mysql_query("SELECT * FROM leden WHERE id = ". $random);
  9. $objectlid = mysql_fetch_object($selectlid);
  10. $aantallid = mysql_num_rows($selectlid);
  11. }
  12. echo "<a href='/$objectlid->gebruikersnaam'>". $objectlid->gebruikersnaam ."</a><br>";
  13. if ($objectlid->avater == "") {
  14. echo "<img src='http://www.profielweb.nl/images/geen.jpg' border='0' width='100' height='100'><br><br>";
  15. } else {
  16. echo "<img src='http://www.profielweb.nl/ava/". $objectlid->avater ."' border='0'><br><br>";
  17. }
  18. echo "Hoi! me naam is ". $objectlid->naam .", en ik ben een ". $objectlid->geslacht .".
  19. Ik ben ". $objectlid->status ." op profielweb en ben vanaf ". $objectlid->datum ." lid.
  20. Ik ben geboren op : ". $objectlid->geboortedatum1 ."-". $objectlid->geboortedatum2 ."-". $objectlid->geboortedatum3 ." en ik heb ". $objectlid->credits ." Cr.
  21. Ik heb ". $objectlid->forumpost ." berichtjes op het forum geplaats en me profiel is ". $objectlid->bekeken ." keer bekeken.";
  22. if ($objectlid->hobbys == "") {
  23. echo "Ik heb geen hobby's";
  24. } else {
  25. echo "Me hobby's zijn ". $objectlid->hobbys .".";
  26. }
  27. ?>


Maar dit is een oneindige lus ?
Offline DRUNK - 26/09/2005 15:57 (laatste wijziging 26/09/2005 15:58)
Avatar van DRUNK PHP gevorderde Neen, zolang $aantallid gelijik aan 0 is zal de loop blijen doorlopen. Maar als je gelijk bij de eerste keer doorlopen een 'geldig' id hebt geseleceerd gaat deze var op 1, dus $aantallid is geen 0 meer dus de loop stopt ...

Heb je bij de eerste keer doorlopen geen geldig ID eselecteerd dan loopt de loop gewoon door tot er een geldig ID is 
Offline Martijn1989 - 26/09/2005 16:04
Avatar van Martijn1989 PHP ver gevorderde Jawel, het is wel een oneindige lus, ik kan er niks aan doen .... hij blijft heel de tijd laden, dus is het een oneindige lus?
Offline DRUNK - 26/09/2005 16:09 (laatste wijziging 26/09/2005 16:31)
Avatar van DRUNK PHP gevorderde En wat leverd dit op:
  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. $tested = array();
  6. $valid_id = FALSE;
  7. $max = MySQL_result(MySQL_query("count (id) FROM leden"),0);
  8.  
  9. while (!$valid_id) {
  10. if (in_array(($random = rand(0,$max)), $tested))
  11. continue;
  12.  
  13. $selectlid = mysql_query("SELECT * FROM leden WHERE id = ". $random);
  14.  
  15. if (mysql_num_rows($selectlid) > 0) {
  16. $objectlid = mysql_fetch_object($selectlid);
  17. $valid_id = TRUE;
  18. }
  19. $tested[] = $random;
  20. }
  21. // ... en hier de rest nog ...
  22. ?>
Offline Martijn1989 - 26/09/2005 16:23 (laatste wijziging 26/09/2005 16:23)
Avatar van Martijn1989 PHP ver gevorderde Ik heb er dit van gemaakt :

  1. <?php
  2. include("config.php");
  3.  
  4. $tested = array();
  5. $aantallid = FALSE;
  6. $max = MySQL_result(MySQL_query("count (id) FROM leden"),0);
  7.  
  8. while (!$aantallid) {
  9. if (in_array(($random = rand(0,$max), $tested)))
  10. continue;
  11.  
  12. $selectlid = mysql_query("SELECT * FROM leden WHERE id = ". $random);
  13.  
  14. if (mysql_num_rows($selectlid) > 0) {
  15. $objectlid = mysql_fetch_object($selectlid);
  16. $aantallid = TRUE;
  17. }
  18. $tested[] = $random;
  19. }
  20. echo "<a href='/$objectlid->gebruikersnaam'>". $objectlid->gebruikersnaam ."</a><br>";
  21. if ($objectlid->avater == "") {
  22. echo "<img src='http://www.profielweb.nl/images/geen.jpg' border='0' width='100' height='100'><br><br>";
  23. } else {
  24. echo "<img src='http://www.profielweb.nl/ava/". $objectlid->avater ."' border='0'><br><br>";
  25. }
  26. echo "Hoi! me naam is ". $objectlid->naam .", en ik ben een ". $objectlid->geslacht .".
  27. Ik ben ". $objectlid->status ." op profielweb en ben vanaf ". $objectlid->datum ." lid.
  28. Ik ben geboren op : ". $objectlid->geboortedatum1 ."-". $objectlid->geboortedatum2 ."-". $objectlid->geboortedatum3 ." en ik heb ". $objectlid->credits ." Cr.
  29. Ik heb ". $objectlid->forumpost ." berichtjes op het forum geplaats en me profiel is ". $objectlid->bekeken ." keer bekeken.";
  30. if ($objectlid->hobbys == "") {
  31. echo "Ik heb geen hobby's";
  32. } else {
  33. echo "Me hobby's zijn ". $objectlid->hobbys .".";
  34. }
  35. ?>


en dat levert een foutmelding op :
Citaat:
Parse error: parse error, unexpected ',' in /usr/home/pb2531/domains/profielweb.nl/public_html/random.php on line 9
Offline DRUNK - 26/09/2005 16:33
Avatar van DRUNK PHP gevorderde [Ctrl]+c && [Ctrl]+v leer je niet veel van ... de fout zit op regel 9 een ')' te weinig.

[offtopic]Waarom kopiert iedereen die voorbeelden altijd zo letterlijk :/[/offtopic]
Offline Martijn1989 - 26/09/2005 16:39 (laatste wijziging 26/09/2005 16:57)
Avatar van Martijn1989 PHP ver gevorderde Nee, die heb ik tog al veranderd? 4×( en 4×) ?
Offline Steven - 26/09/2005 17:56
Avatar van Steven HTML interesse Een tipje, je kan beter mysql_fetch_assoc gebruiken. Hierdoor wordt het script sneller + het kost minder vermogen van je database. Hier heb ik het even veranderd.

Voorbeeld: gebruiker->gebruikersnaam wordt: gebruiker['gebruikersnaam']

  1. <?php
  2. include("config.php");
  3.  
  4. $tested = array();
  5. $aantallid = FALSE;
  6. $max = MySQL_result(MySQL_query("count (id) FROM leden"),0);
  7.  
  8. while (!$aantallid) {
  9. if (in_array(($random = rand(0,$max), $tested)))
  10. continue;
  11.  
  12. $selectlid = mysql_query("SELECT * FROM leden WHERE id = ". $random);
  13.  
  14. if (mysql_num_rows($selectlid) > 0) {
  15. $objectlid = mysql_fetch_assoc($selectlid);
  16. $aantallid = TRUE;
  17. }
  18. $tested[] = $random;
  19. }
  20. echo "<a href='/$objectlid['gebruikersnaam']'>". $objectlid['gebruikersnaam'] ."</a><br>";
  21. if ($objectlid['avater'] == "") {
  22. echo "<img src='http://www.profielweb.nl/images/geen.jpg' border='0' width='100' height='100'><br><br>";
  23. } else {
  24. echo "<img src='http://www.profielweb.nl/ava/". $objectlid['avater'] ."' border='0'><br><br>";
  25. }
  26. echo "Hoi! me naam is ". $objectlid['naam'] .", en ik ben een ". $objectlid['geslacht'] .".
  27. Ik ben ". $objectlid['status'] ." op profielweb en ben vanaf ". $objectlid['datum'] ." lid.
  28. Ik ben geboren op : ". $objectlid['geboortedatum1'] ."-". $objectlid['geboortedatum2'] ."-". $objectlid['geboortedatum3'] ." en ik heb ". $objectlid['credits'] ." Cr.
  29. Ik heb ". $objectlid['forumpost'] ." berichtjes op het forum geplaats en me profiel is ". $objectlid['bekeken'] ." keer bekeken.";
  30. if ($objectlid['hobbys'] == "") {
  31. echo "Ik heb geen hobby's";
  32. } else {
  33. echo "Me hobby's zijn ". $objectlid['hobbys'] .".";
  34. }
  35. ?>
Offline ikkedikke - 26/09/2005 18:26
Avatar van ikkedikke PHP expert tis misshcien affectiever dat je gewoon een id pakt om te beginnen, en als die mist gewoon de volgende te pakken
Offline Tuinstoel - 26/09/2005 18:39
Avatar van Tuinstoel PHP expert Waarom gebruik je in godsnaam niet de functie RAND() in MySQL? Heb je altijd beet...

  1. SELECT * FROM `tabel` ORDER BY RAND() LIMIT 0,1
Offline Martijn1989 - 26/09/2005 18:59
Avatar van Martijn1989 PHP ver gevorderde Volgens mij werkt het perfect ;)

Citaat:
Waarom gebruik je in godsnaam niet de functie RAND() in MySQL? -> ik wist niet dat die bestond.



Bedankt ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.306s