requete sql vers bdd...

requete sql vers bdd... - PHP - Programmation

Marsh Posté le 28-05-2006 à 20:38:14    

bonjour, j'ai hérité d'un code, étant ignorant en php/sql, qui fonction à moitié, c'est un menu déroulant devant afficher les titres des 10 ou 15 derniers articles et le nombre commentaires/réponses qui leur sont attaché, mais le nombre de réponse ne s'affiche pas, et je ne sais vraiment comment faire ?  
 
merci pour l'aide que vous pourriez m'apporter , voici le code :  
 

Code :
  1. <?
  2. $temp = "";
  3. $bloc= "";
  4. //--------------------
  5. //Hack by Gantz [Start] v1.0 & utopiaste
  6. $bloc .= "&nbsp;<br><MARQUEE behavior= \"scroll\" align= \"center\" direction= \"up\" height=\"150\" scrollamount= \"2\" scrolldelay= \"80\" onmouseover='this.stop()' onmouseout='this.start()'>";
  7. //Hack [End]
  8. //--------------------
  9. $req=mysql_query("SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, $result_blocs->parametre2" );
  10. while ($ligne = mysql_fetch_object($req)) {
  11. $requete=mysql_query("SELECT COUNT(id) FROM `commentaires` WHERE `ref`=\"$ligne->id\"" );
  12. $nb = mysql_fetch_row($requete);
  13. $nb = $nb[0] ;
  14. $result = mysql_query("SELECT COUNT(id) FROM `commentaires` WHERE `ref`=$ligne->id" );
  15.     $nb2 = mysql_fetch_row($result);
  16.     $nb2 = $nb2[0] ;
  17.   if ($nb2/20 != intval($nb2/20))
  18.   {
  19.     $page = intval($nb2/20+1);
  20.   }
  21.    else
  22.   {
  23.    $page = intval($nb2/20);
  24.   }
  25.   if ($page=="0" )
  26.   {
  27.   $page=1;
  28.   }
  29. $bloc = $bloc."<img src=themes/$theme/images/articles/puce.gif>&nbsp;&nbsp;<a href=index.php?mod=articles&ac=commentaires&id=$ligne->id&debut=".($page * 20 - 20).">$ligne->titre</a><BR>($nb réponses)<br><br>" ;
  30. }
  31. //--------------------
  32. //Hack by Gantz [Start] v1.0 & utopiaste
  33. $bloc .= "</MARQUEE><HR><center><a href=index.php?mod=articles>Aller voir les articles</a></center>" ;
  34. //Hack [End]
  35. //--------------------
  36. Bloc ($result_blocs->parametre1,$bloc) ;
  37. ?>


 
 
j'ai modifié un peu le code au niveau des requetes de cette façon :  
 
 

Code :
  1. $sql = "SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, ".$result_blocs->parametre2;
  2. echo $sql;
  3. $req=mysql_query($sql);
  4. while ($ligne = mysql_fetch_object($req))
  5. {
  6. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=\"$ligne->id\"";
  7. echo $sql;
  8. $req=mysql_query($sql);
  9. $nb = mysql_fetch_row($requete);
  10. $nb = $nb[0] ;
  11. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=$ligne->id";
  12. echo $sql;
  13. $req=mysql_query($sql);
  14.     $nb2 = mysql_fetch_row($result);
  15.     $nb2 = $nb2[0] ;


 
et les erreures suivantes apparaissent sur ma page :  
 

Citation :

SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, 15SELECT COUNT(id) FROM `commentaires` WHERE `ref`="94"SELECT COUNT(id) FROM `commentaires` WHERE `ref`=94
 
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/zipe/www/modules/articles/bloc.php on line 30
 
SELECT COUNT(id) FROM `commentaires` WHERE `ref`=""SELECT COUNT(id) FROM `commentaires` WHERE `ref`=
 
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/zipe/www/modules/articles/bloc.php on line 30
 
 
 
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/zipe/www/modules/articles/bloc.php on line 18


 
qu'est ce que cela signifie mise à part qu'il y a des erreur de syntaxe sql , comment résoudre ce probleme ?
 
merci d'avance !

Reply

Marsh Posté le 28-05-2006 à 20:38:14   

Reply

Marsh Posté le 28-05-2006 à 21:21:32    

Reply

Marsh Posté le 28-05-2006 à 21:32:53    

si je comprends un petit quelque chose à ce qui est écrit vers le manuel auquel tu me renvois, les warning apparaissent car la connexion n'est pas établie ?
 

Citation :

Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.


 
c'est bien cela ?

Reply

Marsh Posté le 28-05-2006 à 21:45:33    

Non, il voudrait bien que tu utilises le mysql_error pour qu'on ait le message d'erreur que renvoit mysql lors de la requête :)
 
Donc

Code :
  1. $req=mysql_query($sql);


 
devient

Code :
  1. $req=mysql_query($sql);
  2. if (!$req) {
  3.    echo mysql_error()." : $sql<br />";
  4. }


Reply

Marsh Posté le 28-05-2006 à 23:42:20    

donc, si je comprend bien le mysql error me permet de situer exactement l'erreur, c'est bien cela ? et me donne la solution ?
 
ainsi quelle devrait être le code de cette requêt par exemple ?
 
et derniére question, je ne comprend pas le message d'erreur  général ?  
 
est-ce que sur cette section-ci du code :  
 
"SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, 15SELECT COUNT(id) FROM `commentaires` WHERE `ref`="94"SELECT COUNT(id) FROM `commentaires` WHERE `ref`=94 "
 
il y a une erreur ?

Reply

Marsh Posté le 28-05-2006 à 23:51:46    

tu as remplacé dans son code $result et $requete
 

Code :
  1. #
  2. $requete=mysql_query("SELECT COUNT(id) FROM `commentaires` WHERE `ref`=\"$ligne->id\"" );
  3. #
  4. $nb = mysql_fetch_row($requete);
  5. #
  6. $nb = $nb[0] ;
  7. #
  8. #
  9. $result = mysql_query("SELECT COUNT(id) FROM `commentaires` WHERE `ref`=$ligne->id" );
  10. #
  11.    $nb2 = mysql_fetch_row($result);
  12. #
  13.    $nb2 = $nb2[0] ;
  14. #


 
 

Code :
  1. #
  2. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=\"$ligne->id\"";
  3. #
  4. echo $sql;
  5. #
  6. $req=mysql_query($sql);
  7. #
  8. $nb = mysql_fetch_row($requete);
  9. #
  10. $nb = $nb[0] ;
  11. #
  12. #
  13. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=$ligne->id";
  14. #
  15. echo $sql;
  16. #
  17. $req=mysql_query($sql);
  18. #
  19.    $nb2 = mysql_fetch_row($result);
  20. #
  21.    $nb2 = $nb2[0] ;

Reply

Marsh Posté le 29-05-2006 à 01:55:34    

poilue a écrit :

donc, si je comprend bien le mysql error me permet de situer exactement l'erreur, c'est bien cela ? et me donne la solution ?


 
mysql_error va renvoyer l'erreur qu'a rencontré mysql s'il y en a une, rien de plus. C'est un indice pour savoir où chercher, pas la solution à tous les problèmes (ça nous ferait des vacances :D)
 

Citation :

et derniére question, je ne comprend pas le message d'erreur  général ?


 
le warning de php te dit que l'argument que tu passes à la fonction mysql_fetch_row ($req et $requete en l'occurence) ne sont pas un ensemble de résultat mysql. Soit parce que la requête est fausse (d'où le besoin du mysql_error) soit parce que tu t'es trompé de nom de variable (c'est le cas ici, tu appelles $req le resultat de mysql_query mais tu te sers de $requete et $result dans les deux derniers mysql_fetch_row, ça colle pas).
 

Citation :

SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, 15
SELECT COUNT(id) FROM `commentaires` WHERE `ref`="94"
SELECT COUNT(id) FROM `commentaires` WHERE `ref`=94


 
Syntaxiquement, c'est correct

Reply

Marsh Posté le 29-05-2006 à 03:17:14    

donc il me suffit de remplacer le
 
$req par $requete, et c'est tout ?
 
par contre j'aimerai bien comprendre quelque chose au php: pourquoi pour la première requète, n'y-a-t-il pas de résulte ? alors que pour la seconde, il y a deux requêtes ? une requete et une result ?

Reply

Marsh Posté le 29-05-2006 à 14:51:41    

j'ai chnagé req par requete et à présent les warning ont disparu, mais les articles ne s'affichent pas, et le code suivant reste affiché sur la page :  
 

Code :
  1. SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, 15


 
cela veut dire qu'il ne va pas chercher les articles, mais pourquoi ?

Reply

Marsh Posté le 30-05-2006 à 04:57:37    

non cela veut dire que tu as demandé des echos et il obeit stupidement
 
je pense que tu as du mal lire mon message
tu as fait des changements erratiques sur le script original
compare bien les deux scripts dans mon message et essaie d analyser tes erreurs ;)

Reply

Marsh Posté le 30-05-2006 à 04:57:37   

Reply

Marsh Posté le 30-05-2006 à 23:48:39    

d'accord, j'ai compris désolé, donc voici mon nouveau code :  
 

Code :
  1. $sql = "SELECT * FROM `article` ORDER BY `date` DESC LIMIT 0, ".$result_blocs->parametre2;
  2. echo $sql;
  3. $req=mysql_query($sql);
  4. while ($ligne = mysql_fetch_object($req))
  5. {
  6. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=\"$ligne->id\"";
  7. echo $sql;
  8. $req=mysql_query($sql);
  9. $nb = mysql_fetch_row($req);
  10. $nb = $nb[0] ;
  11. $sql = "SELECT COUNT(id) FROM `commentaires` WHERE `ref`=$ligne->id";
  12. echo $sql;
  13. $result = mysql_query($sql);
  14.     $nb2 = mysql_fetch_row($result);
  15.     $nb2 = $nb2[0] ;


 
il est correct maintenant, non ?
 
mais, je n'ai qu'un article qui s'affiche ...? et le menu ne défile plus ?

Reply

Sujets relatifs:

Leave a Replay

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