Pourquoi cette erreur avec ce code ? affichage img aléatoire [PHP&SQL]

Pourquoi cette erreur avec ce code ? affichage img aléatoire [PHP&SQL] - PHP - Programmation

Marsh Posté le 13-11-2002 à 16:16:21    

Warning: Unable to jump to row 0 on MySQL result index 16 in /home/_he/hellfire/pub/www/screentest.php on line 32  
 
Warning: Unable to jump to row 0 on MySQL result index 16 in /home/_he/hellfire/pub/www/screentest.php on line 33  


 
Pourquoi je rencontre ces erreurs ?
 
avec ce code :
 

Code :
  1. <?
  2. require("config.php" );
  3. $db=mysql_connect("$sql","$log","$pas" );
  4. mysql_select_db("$dbs",$db);
  5. $sqlprout = "SELECT id FROM sys_images";
  6. $reqprout = mysql_query($sqlprout) or die('Erreur SQL !<br>'.$sqlprout.'<br>'.mysql_error());
  7. $totalimg = mysql_num_rows($reqprout);
  8. /* Initialisation du random */
  9. srand((float) microtime()*1000000);
  10. /* Génération du nbre aléatoire entre 1 et $totalimg */
  11. $num_photo = rand(1,$totalimg);
  12. $sqlimg = "SELECT * FROM sys_images where id=$num_photo";
  13. $reqimg = mysql_query($sqlimg) or die('Erreur SQL !<br>'.$sqlimg.'<br>'.mysql_error());
  14. $i=0;
  15. $urlpetitep       = mysql_result($reqimg,$i,"urlpetite" );
  16. $urlgrandep       = mysql_result($reqimg,$i,"urlgrande" );
  17. echo "<center><a href='$urlgrandep' target='_blank'><img src='$urlpetitep' border='1' width='120' height='95'></a></center>";
  18. ?>

Reply

Marsh Posté le 13-11-2002 à 16:16:21   

Reply

Marsh Posté le 13-11-2002 à 16:31:14    

rainckill a écrit a écrit :

Warning: Unable to jump to row 0 on MySQL result index 16 in /home/_he/hellfire/pub/www/screentest.php on line 32  
 
Warning: Unable to jump to row 0 on MySQL result index 16 in /home/_he/hellfire/pub/www/screentest.php on line 33  


 
Pourquoi je rencontre ces erreurs ?
 
avec ce code :
 

Code :
  1. <?
  2. require("config.php" );
  3. $db=mysql_connect("$sql","$log","$pas" );
  4. mysql_select_db("$dbs",$db);
  5. $sqlprout = "SELECT id FROM sys_images";
  6. $reqprout = mysql_query($sqlprout) or die('Erreur SQL !<br>'.$sqlprout.'<br>'.mysql_error());
  7. $totalimg = mysql_num_rows($reqprout);
  8. /* Initialisation du random */
  9. srand((float) microtime()*1000000);
  10. /* Génération du nbre aléatoire entre 1 et $totalimg */
  11. $num_photo = rand(1,$totalimg);
  12. $sqlimg = "SELECT * FROM sys_images where id=$num_photo";
  13. $reqimg = mysql_query($sqlimg) or die('Erreur SQL !<br>'.$sqlimg.'<br>'.mysql_error());
  14. $i=0;
  15. $urlpetitep       = mysql_result($reqimg,$i,"urlpetite" );
  16. $urlgrandep       = mysql_result($reqimg,$i,"urlgrande" );
  17. echo "<center><a href='$urlgrandep' target='_blank'><img src='$urlpetitep' border='1' width='120' height='95'></a></center>";
  18. ?>





Cette erreur arrive quand ta requête ne ramène rien ou que ta variable n'est pas le résultat d'une requête.
 
Pourquoi ca ramène rien?
Surement que t'as loupé la conection à la base ou que ta table est vide.
 
Solution : tester le nombre de ligne retourné et vérifier que la requête c'est bien exécuté (pas d'erreur dans la requête)

Reply

Marsh Posté le 13-11-2002 à 16:35:36    

non enfait elle apparait que une fois sur cent !
 
sur 100 refresh, elle va, approximativmeent, affiché 90 images aléatoires, et 10 avec cette erruer :-/ (chiffres au pif ;))
 
:|

Reply

Marsh Posté le 13-11-2002 à 16:49:55    

Les appels mysql_result() ne devraient pas être mélangés avec d'autres fonctions qui travaillent aussi sur le résultat.  
 
Alternatives à haut rendement, RECOMMANDEES : mysql_fetch_row(), mysql_fetch_array() et mysql_fetch_object().  

Reply

Marsh Posté le 13-11-2002 à 16:53:45    

Ben t'es sur que t'as une image d'id $num_photo ?
Si t'as un trous dans ta liste d'id, c'est normal que ca plante.
Au lieu d'un  

Code :
  1. $sqlimg = "SELECT * FROM sys_images where id=$num_photo";


essayes un

Code :
  1. $sqlimg = "SELECT * FROM sys_images LIMIT $num_photo,1";


Ensuite, tu prends l'ID de la seconde requêtes si t'as besoin de t'en servir.
 
Autre truc, pour que cette modif marche bien, utilise un count(*) dans la première requête. ;)

Reply

Marsh Posté le 13-11-2002 à 18:57:41    

ah oui ! effectivement, il me manque les photo d'id 33, 53, 58 :-/
 
Ma technique ets aps très bien enfait !!
 
Et, ta nouvelle requette avec le ',1' en plus mènera à kelle différence ?

Reply

Marsh Posté le 13-11-2002 à 19:57:46    

rainckill a écrit a écrit :

ah oui ! effectivement, il me manque les photo d'id 33, 53, 58 :-/
 
Ma technique ets aps très bien enfait !!
 
Et, ta nouvelle requette avec le ',1' en plus mènera à kelle différence ?



Ben la nouvelle requête ta ramènera la niéme photo de ta base et rien que celle là (le 1 limite le retour à 1 seule occurence et l'autre donne a partir de quelle occurence de la requête on commence à ramener des données).
L'autre requête te donne le nombre d'occurence qui pourait être ramené par la seconde requête.
 
 
Normalement avec ça, tu devrais plus avoir de problème de "trou" dans les ID vu que c'est plus basé dessus.

Reply

Marsh Posté le 14-11-2002 à 19:57:12    

je comprend aps pq l'ajout u ,1 résoudré mon probleme lol :)
 
désolé, mais tu pourré expliqué ? :)  
 
:jap:

Reply

Marsh Posté le 14-11-2002 à 21:11:55    

rainckill a écrit a écrit :

je comprend aps pq l'ajout u ,1 résoudré mon probleme lol :)
 
désolé, mais tu pourré expliqué ? :)  
 
:jap:



LIMIT délimite un intervale de ligne à retourner.
Pour savoir quel intervale, on lui donne deux nombre, le début de l'intervale et la taille de l'intervale. ;)

Reply

Marsh Posté le 14-11-2002 à 22:12:35    

omega2 a écrit a écrit :

LIMIT délimite un intervale de ligne à retourner.
Pour savoir quel intervale, on lui donne deux nombre, le début de l'intervale et la taille de l'intervale. ;)




 
oui, mais si on lui retourne un début d'intervalle au numero 53 (dont lid de lmg existe pas), il y aura la meême erruer... Vu que l'intervalle commenceant à 53, de taille 1, c'ets le nombre 53 lui même, non ?
 
D'ou la même erruer rencontré ?

Reply

Marsh Posté le 14-11-2002 à 22:12:35   

Reply

Marsh Posté le 15-11-2002 à 11:28:04    

rainckill a écrit a écrit :

 
 
oui, mais si on lui retourne un début d'intervalle au numero 53 (dont lid de lmg existe pas), il y aura la meême erruer... Vu que l'intervalle commenceant à 53, de taille 1, c'ets le nombre 53 lui même, non ?
 
D'ou la même erruer rencontré ?



Non, il se base pas sur les ID mais sur la position des lignes parmis l'ensemble de ligne retourné par la requête s'il n'y a pas de LIMIT.
Que la 53 éme ligne ai comme ID "0" "200" ou "53", lui il s'en fout.
 
Il se dit juste :
voilà tout ce qui correspond à ce qu'on me demande. Alors voyont voir, je doit commencé à retourner des valeurs qu'à partir de la 53 éme, donc j'en saute 52 et ensuite j'en envoit 1 (c'est un exemple) . Une fois que j'en ai envoyé 1, je laisses tombé le reste.


Message édité par omega2 le 15-11-2002 à 11:28:55
Reply

Marsh Posté le 25-12-2002 à 20:44:02    

Alors la je comprend pas !!!
 
Voila, j'ai une table avec 78 enregistrement. Tous contiennent des infos pour des images (affiché ici : http://www.hellfire.firstream.net/ [...] allpapers) et j'utilise ce script pour la prise aléattoire dans cette table :
 

Code :
  1. <?
  2. require("config.php" );
  3. $db=mysql_connect("$sql","$log","$pas" );
  4. mysql_select_db("$dbs",$db);
  5. $sqlprout = "SELECT count(*) FROM sys_images";
  6. $reqprout = mysql_query($sqlprout) or die('Erreur SQL !<br>'.$sqlprout.'<br>'.mysql_error());
  7. $totalimg = mysql_num_rows($reqprout);
  8. /* Initialisation du random */
  9. srand((float) microtime()*1000000);
  10. /* Génération du nbre aléatoire entre 1 et $totalimg */
  11. $num_photo = rand(1,$totalimg);
  12. $sqlimg = "SELECT * FROM sys_images LIMIT $num_photo,1";
  13. $reqimg = mysql_query($sqlimg) or die('Erreur SQL !<br>'.$sqlimg.'<br>'.mysql_error());
  14. $i=0;
  15. $urlpetitep       = mysql_result($reqimg,$i,"urlpetite" );
  16. $urlgrandep       = mysql_result($reqimg,$i,"urlgrande" );
  17. echo "<center><a href='$urlgrandep' target='_blank'><img src='$urlpetitep' border='1' width='120' height='95'></a></center>";
  18. ?>


 
Mais c'est toujours ma meme image qui s'affiche !!!!! Vraiment je comprend pas !
 
Merci pour votre aide !

Reply

Marsh Posté le 26-12-2002 à 13:26:29    

up  :bounce:

Reply

Marsh Posté le 27-12-2002 à 03:31:28    

fais un select ... order by rand() limit 1 sur ta table et tu recuperera une ligne de ta table aleatoirement.
 
quand a ton probleme d'aleatoire en php, aucune idée

Reply

Marsh Posté le 29-12-2002 à 12:39:52    

tu veux dire qu'un
 
"SELECT * FROM sys_images order by rand() limit 1";
 
 
prendra une ligne o hazar sur la table, et donc, pas besoin du reste du code pouir générer un chiffre aléatoire ?
 

Reply

Marsh Posté le 29-12-2002 à 13:42:11    

affirmatif

Reply

Marsh Posté le 30-12-2002 à 11:44:38    

Oki, c'est excelent alors ! :)
 
J'la connaissais pas ^^
 
Merci a toi

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed