Page 1 sur 2

Probleme script commentaire avec mysql_fetch_assoc

Posté : 11 mai 2007, 12:48
par Morkem
Bonjour a tous,
J'essaye de faire depuis quelques jours un script de news avec commentaires etc mais je suis actuellement bloqué sur les commentaires.

J'ai cette erreur : Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home.5/p/z/y/pzykoz/www/commentaires.php on line 57

Ne cherchez pas la ligne c'est celle avec la boucle while dans les commentaires mais je ne comprend pas. Avec le or die ca me dit qu'il y a une erreur de syntaxe sql mais je ne la vois pas.

J'espère que vous pourrez m'aider. Merci

Code : Tout sélectionner

<?php include('fonction.php'); connexionbdd(); // ================================ // Affichage de la news à commenter // ================================ $id_news = intval($_GET['id_news']); // cette variable contient l'id de la news sur laquelle on veut voir les commentaires $requete_news = mysql_query('SELECT id, titre, contenu, pseudo, timestamp_validation FROM site_news WHERE id='.$id_news); while($donnees_news = mysql_fetch_assoc($requete_news)) { ?> <div id="news"> <table width="100%" border="1" cellpadding="1" cellspacing="0"> <tr><td> <table width="100%"> <tr> <td align="left"><strong>#<?php echo $donnees_news['id']; ?> | <?php echo $donnees_news['titre']; ?></strong></th> <td align="right">par <strong><?php echo $donnees_news['pseudo']; ?></strong> ~ <em><?php echo date('d/m/Y', $donnees_news['timestamp_validation']); ?></em></td> </td></tr> </table> </tr> </table> <table width="100%" cellpadding="2"> <tr> <td colspan="2"></th> </tr> <tr> <td align="left" border="1" colspan="2"><?php echo $donnees_news['contenu']; ?></th> </tr> </table> </div> <a href="index.php">Retour</a> <?php } // ====================== // Début de la pagination // ====================== $limit_par_page = 15; // On définit une variable pour dire combien de commentaires on veut par page if (isset($_GET['page']) AND !empty($_GET['page'])) { $page = intval($_GET['page']); } else { $page = 1; } $from = ($page - 1) * $limit_par_page; // ======================= // Boucle des commentaires // ======================= $requete_com = mysql_query('SELECT id, pseudo, message, timestamp FROM site_newscommentaires WHERE idnews='.$id_news.' LIMIT '.$from.', '.$limit_par_page); while($donnees_com = mysql_fetch_assoc($requete_com)) { ?> <div id="news"> <table width="100%"> <tr> <th align="left"><strong>#<?php echo $donnees_com['id']; ?> | <?php echo $donnees_com['pseudo']; ?></strong></th> <td align="right"><?php echo date('d/m/Y', $donnees_com['timestamp']); ?> ~ <?php echo date('H\hi', $donnees_com['timestamp_validation']); ?></td> </tr> <tr> <th colspan="2"><hr /></th> </tr> <tr> <th align="left" colspan="2"><?php echo $donnees_com['message']; ?></th> </tr> </table> </div> <?php } // ================================ // Dernière partie de la pagination // ================================ $requete = mysql_query('SELECT COUNT(id) AS nb_commentaires FROM site_newscommentaires WHERE idnews='.$id_news); $donnees = mysql_fetch_assoc($requete); $nb_pages = ceil($donnees['nb_commentaires'] / $limit_par_page); for ($i=1 ; $i<=$nb_pages ; $i++) { if ($i == $page) { echo '['.$i.']'; } else { echo '<a href="index.php?page=commentaires&id_news='.$id_news.'&page='.$i.'">'.$i.'</a>'; } } mysql_close(); ?> <form method="post" action="index.php?page=ajout_commentaire"> Pseudo : <input type="text" name="pseudo" /><br /> <textarea name="message"></textarea><br/> <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" /> <input type="submit" value="Envoyer" /> </form>

Posté : 11 mai 2007, 12:53
par orgerix
Teste ta requete SQL, je pense que l'erreur vient de la.

Posté : 11 mai 2007, 12:57
par guilt92
Si il y a une erreur dans la requete c'est normal que le mysql_fetch_assoc() ne fonctionne pas... Tu devrais laisser les or die(), ils ne se déclenchent pas pour rien...

Je te conseille de faire
echo 'SELECT COUNT(id) AS nb_commentaires FROM site_newscommentaires WHERE idnews='.$id_news.'<br/>';
$requete = mysql_query('SELECT COUNT(id) AS nb_commentaires FROM site_newscommentaires WHERE idnews='.$id_news) or die(mysql_error()); 
Tu vas donc voir ta requete et l'erreur générée, de là tu pourras surement corriger ta requete... Le nom de la base, le nom de la colonne peut etre... Tu as une colonne id et une colonne idnews qui sont différentes ? Quelle est l'erreur générée par or die(msyql_error()) ?

Posté : 11 mai 2007, 13:19
par Morkem
Erreur syntax sql :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$req = 'SELECT id, pseudo, message, timestamp FROM site_newscommentaires WHERE i' at line 1

Ca c'est quand je le fais a partir de phpmyadmin

et av le or die c'est la même chose : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-15, 15' at line 1

Posté : 11 mai 2007, 13:22
par jojolapine
et alors qu'en conclus tu ?
On va pas tout faire quand même :wink:

Posté : 11 mai 2007, 13:23
par Morkem
Euh il faut en conclure quelque chose :oops:

Je ne sais pas :(

Posté : 11 mai 2007, 13:26
par jojolapine
et ben ça veut clairement dire que le problème se situe dans ta requête...
Montre nous le résultat du echo sur ta requête...

Posté : 11 mai 2007, 13:36
par Morkem
Ba je ne vois pas trop quoi faire en plus... J'ai mis le echo avant la requete ? C'etait ca qu'il fallait faire ?

Ca donne ca : SELECT COUNT(id) AS nb_commentaires FROM site_newscommentaires WHERE idnews=1

Mais c'est logique je comprend pas ce qu'il faut tester

Posté : 11 mai 2007, 13:42
par guilt92
Peut tu aussi faire voir la structure de ta table stp ? La comme ca je vois pas d erreur non plus....

Posté : 11 mai 2007, 13:45
par Morkem

Code : Tout sélectionner

`site_newscommentaires` ( `id` int(11) NOT NULL auto_increment, `idnews` int(11) NOT NULL, `pseudo` varchar(25) NOT NULL, `message` text NOT NULL, `timestamp` int(11) NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
Le id c'est id du commentaire et idnews c'est id de la news attaché

Posté : 11 mai 2007, 14:10
par guilt92
Bah désolé la je vois pas... Tu es sur que l'erreur vient de cette requete la ?
Car dans le message d'erreur que tu nous a donné ca avait l'air de porter sur une autre requete...

Met des or die("Erreur 1:".mysql_error()) apres chaque requete avec un numéro différent pour etre sur que ca vient de la... sinon je sais vraiment pas...

Posté : 11 mai 2007, 22:53
par Morkem
Ba oui ligne 57 ^^

Est ce que cela ne peut pas venir du fait qu'il y ait 3 mysql_fetch_assoc() ??

Ou est ce qu'on ne peut pas contourner le problème en remplacant ca par une fonction equivalente?

Posté : 11 mai 2007, 22:56
par Ultim4T0m
Cela n'empêche pas d'appliquer le conseil de guilt92

Tente peut-être de protéger tes champs dans ta requête, à l'aide de `, mais je ne pense pas que cela sera d'un quelconque intérêt... Enfin, quand personne ne trouve, mieux vaut tout tenter :D

Edit : Cela ne vient pas du mysql_fetch_assoc(), mais de la requête. Tu peux toujours la remplacer par un mysql_fetch_array(), sans avoir à modifier quoi que ce soit d'autre dans ton code, mais ca ne devrait pas changer grand chose.

Posté : 12 mai 2007, 10:32
par Morkem
Non j'ai déjà essayé les array...
Je vais essayer avec les or die mais je ne vois pas l'interet puisque le reste fonctionne et s'affiche :?

Je reviens apres avoir testé :wink:

Posté : 12 mai 2007, 11:11
par Morkem
J'ai trouvé le problème mais je ne sais pas comment le corriger.

En fait lorsque mon lien pour aller aux commentaires est du type :

Code : Tout sélectionner

index.php?page=commentaires&id_news=<?php echo $donnees_news['id']; ?>
Ca ne fonctionne pas.

Par contre si je met :

Code : Tout sélectionner

commentaires.php?id_news=<?php echo $donnees_news['id']; ?>
Ca fonctionne... Le problème dans ce cas c'est que je n'ai plus le design de la page :s

Vous pouvez voir le fonctionnement sur http://www.pzykoz.com

Si quelqu'un a une idée du pourquoi du comment il peut me le dire :)