Probleme script commentaire avec mysql_fetch_assoc

Eléphant du PHP | 78 Messages

11 mai 2007, 12:48

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>
Morkem

Mammouth du PHP | 693 Messages

11 mai 2007, 12:53

Teste ta requete SQL, je pense que l'erreur vient de la.

Mammouth du PHP | 1353 Messages

11 mai 2007, 12:57

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()) ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 78 Messages

11 mai 2007, 13:19

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
Morkem

ViPHP
ViPHP | 3607 Messages

11 mai 2007, 13:22

et alors qu'en conclus tu ?
On va pas tout faire quand même :wink:

Eléphant du PHP | 78 Messages

11 mai 2007, 13:23

Euh il faut en conclure quelque chose :oops:

Je ne sais pas :(
Morkem

ViPHP
ViPHP | 3607 Messages

11 mai 2007, 13:26

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...

Eléphant du PHP | 78 Messages

11 mai 2007, 13:36

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
Morkem

Mammouth du PHP | 1353 Messages

11 mai 2007, 13:42

Peut tu aussi faire voir la structure de ta table stp ? La comme ca je vois pas d erreur non plus....
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 78 Messages

11 mai 2007, 13:45

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é
Morkem

Mammouth du PHP | 1353 Messages

11 mai 2007, 14:10

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 78 Messages

11 mai 2007, 22:53

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?
Morkem

Eléphant du PHP | 445 Messages

11 mai 2007, 22:56

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.
LLDC
Ulti

Eléphant du PHP | 78 Messages

12 mai 2007, 10:32

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:
Morkem

Eléphant du PHP | 78 Messages

12 mai 2007, 11:11

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 :)
Morkem