Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1314 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Petit problème avec "rand"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Petit problème avec "rand"

n°1852560
Ben-o
Posté le 18-02-2009 à 14:39:10  profilanswer
 

Salut à tous,
 
J'affiche sur mon site une photo aléatoire sur la page d'accueil grâce à la fonction "rand" de php.
Ça fonctionne très bien, sauf que parfois, aucune photo ne s'affiche.
De quoi cela peut-il provenir ?
 
Voici mon code :
 

Code :
  1. <?php
  2. $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos
  3. $aleatoire = rand(0,$nb_photos);
  4. $requete = mysql_query("SELECT... LIMIT $aleatoire,1" );
  5. while ($resultats = mysql_fetch_array($requete)) {
  6. // affichage de la photo
  7. }
  8. ?>


 
Merci par avance !


Message édité par Ben-o le 18-02-2009 à 15:57:49
mood
Publicité
Posté le 18-02-2009 à 14:39:10  profilanswer
 

n°1852574
macgawel
Posté le 18-02-2009 à 15:00:37  profilanswer
 

:heink:  
 
Tu as lu ça ?

n°1852582
jagstang
Pa Capona ಠ_ಠ
Posté le 18-02-2009 à 15:12:02  profilanswer
 

tu as un problème de limite...  
 
essaie rand(1,$nb_photos);  
 
Sinon, mets uniquement une photo, puis deux pour vérifier le bon fonctionnement


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1852589
Ben-o
Posté le 18-02-2009 à 15:25:28  profilanswer
 

Salut jagstang, j'ai essayé avec rand(1,$nb_photos); mais j'ai le même soucis...
 
Et j'ai également essayé avec une seule photo, puis deux, mais ça me fait la même chose.
 
Peut-être que ça vient du temps d'exécution du script ? La photo n'est peut être pas sélectionnée avant l'affichage de la page ?
J'ai ajouté ce script à ma page faisant un include.

n°1852594
Ben-o
Posté le 18-02-2009 à 15:29:25  profilanswer
 

J'ai testé en mettant directement le script dans la page (sans passer par un include), mais le problème est toujours là... ;-(

n°1852595
macgawel
Posté le 18-02-2009 à 15:30:32  profilanswer
 

macgawel a écrit :

:heink:  
 
Tu as lu ==>ça<== ?


Sinon, pour rester sur ton code :

Code :
  1. <?php
  2. $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos
  3. $aleatoire = rand(0,$nb_photos);
  4. $requete = mysql_query("SELECT... LIMIT $aleatoire,1" );
  5. //Affichage de $aleatoire pour débuggage
  6. echo $aleatoire.'<br />';
  7. while ($resultats = mysql_fetch_array($requete)) {
  8. // affichage de la photo
  9. }
  10. ?>

n°1852597
Ben-o
Posté le 18-02-2009 à 15:34:31  profilanswer
 

Pardon macgawel, je n'avais pas vu le lien... désolé !

n°1852622
omega2
Posté le 18-02-2009 à 15:49:16  profilanswer
 

Quelques remarques :
1)

Code :
  1. $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos

Tu demande à mysql de tout t'envoyer juste pour compter le nombre de photos? :o Avec ce genre de solution, il ne faut pas t'étonner si ton serveur devient lent. A la place, fais simplement un "select count(*)" et regardes la valeur retourné par mysql. Ca sera beaucoup plus rapide.
 
2) limit 0,1 => on saute zéro ligne et on en retourne une (on retourne la première)
limit 5,1 => on saute cinq lignes et on en retourne une (on retourne la sixième)
limite 5,2 => on saute cinq lignes et on en retourne deux (on retourne les sixième et septième lignes)
 
Par conséquent, il faut faire un rand(0,$nb_photos-1); si on veut utiliser le résultat du rand dans la requête.
 
 
 
3)

Code :
  1. <?php
  2. $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos
  3. $aleatoire = rand(0,$nb_photos);
  4. $requete = mysql_query("SELECT... LIMIT $aleatoire,1" );
  5. while ($resultats = mysql_fetch_array($requete)) {
  6. // affichage de la photo
  7. }
  8. ?>


Avec MYSQL, tu peux résumer tout cet enchainement en un :

Code :
  1. <?php
  2. $requete = mysql_query("SELECT... ORDER BY RAND() LIMIT 1" );
  3. if ($resultats = mysql_fetch_array($requete)) {
  4. // j'affiche
  5. }
  6. ?>

Attention, solution à n'utiliser que sur des tables de taille moyennes à petite (devient lent quand on a un grand nombre de lignes).
 
4) Le coup du array_rand proposé par macgawel est valable quand on a déjà les données dans un tableau, mais dans le cas présent, ça nécessite de récupérer toutes les données de la table (ce que tu fais déjà pour ton décompte) et de tout copier dans un tableau. Tout ça prend du temps et consomme de la mémoire.

n°1852630
macgawel
Posté le 18-02-2009 à 15:56:17  profilanswer
 

omega2 a écrit :

4) Le coup du array_rand proposé par macgawel est valable quand on a déjà les données dans un tableau, mais dans le cas présent, ça nécessite de récupérer toutes les données de la table (ce que tu fais déjà pour ton décompte) et de tout copier dans un tableau. Tout ça prend du temps et consomme de la mémoire.


 :o  
Je suis parti de l'existant, et quitte à passer un mysql_query("SELECT..." ), et sachant qu'on aura besoin de récupérer l'image (ou son adresse), je me suis dit que tant qu'à faire...
Et au moins c'est standard, pas comme le SELECT... ORDER BY RAND() LIMIT 1  :kaola:

n°1852633
Ben-o
Posté le 18-02-2009 à 15:57:30  profilanswer
 

Merci omega pour toutes ces précisions, le problème semble résolu !

mood
Publicité
Posté le 18-02-2009 à 15:57:30  profilanswer
 

n°1856593
akileos
En recherche d'emploi
Posté le 01-03-2009 à 22:26:57  profilanswer
 

$aleatoire = rand(0,$nb_photos-1);
 
Devrais marcher ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Petit problème avec "rand"

 

Sujets relatifs
probleme liste deroulante Php / HTML[RESOLU] Masquer barre de menu
[Résolu] TO_CHAR() en MSSQL ?Petit probleme javascript
[JAVA] Recuperer la selection d'une liste [RESOLU]Javascript + probleme lors du chargement d'une page
Problème de formule... pourtant toute simple[PHP] Problème lors de création d'un blog Wordpress
[PERL]probleme avec boucle For 
Plus de sujets relatifs à : [Résolu] Petit problème avec "rand"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR