Système de commentaires

Bonsoir,
Alors voilà, j'ai créer un système de commentaires, mais il ne reste plus qu'a compté combien de commentaires il y a et je suis bloqué.
<?php    
include ('includes/connexion.php');     
      
  $requete = mysql_query ("SELECT * FROM commentaires");    
while($donnees = mysql_fetch_array($requete))    
{    
 echo'<a href="commentaires.php?id_news='.$donnees['id'].'">';    
  // On récupère l'id de la news    
  $id = $donnees['id'];    
  // Connexion à la BDD    
  $connect = mysql_connect('localhost', 'root', '');    
  mysql_select_db('others');    
       
  // On fait une requête pour compter le nbre de commentaires de la news correspondant à l'id    
  $comm = mysql_query("SELECT COUNT(*) AS nbre_comm FROM commentaires WHERE id_news='" . $id ."'");    
  $retour = mysql_fetch_array($comm);    
  $nbre_comm = $retour['nbre_comm'];    
      
  // Déconnexion    
  mysql_close($connect);    
  // On affiche le nombre de commentaires retourné par la requête    
  echo $nbre_comm;    
}    
?>            
</a>


Cela m'affiche 4 0 0 0 ==> 4 commentaires en base de donnée, si j'en rajouté un sa fait 5 0 0 0 etc ... Alors je voudrais à la place de 4 0 0 0 sa donne 4 commentaires,
PS : les 0 ne sont pas les même liens ( commentaires.php?id_news=2, commentaires.php?id_news=3, commentaires.php?id_news=4)
Je penses c'est parce que while($donnees = mysql_fetch_array($requete)) est en array
Que mettre à la place ?

Merci d'avance

6 réponses

  1. Bonjour,

    Essaye en mettant :

     $comm = mysql_query("SELECT COUNT(id_news) AS nbre_comm FROM commentaires WHERE id_news='" . $id ."'");


    1. Toujours pareil mais c'est le whyle qui faut changé mais je sais pas en quoi !!
    2. Non, pas besoin de changer le while, je pense savoir pourquoi ça ne va pas, c'est pas un count(id_news) qu'il faut faire mais :

       $comm = mysql_query("SELECT COUNT(id) AS nbre_comm FROM commentaires WHERE id_news='" . $id ."'");


      Puisque tu veux le nombre de commentaire si j'ai bien compris ta demande. Si j'ai faux, hésite pas à me le dire ;-)
  2. Si vous ne voulez pas reprendre mon codage, je vous donne ce qu'il faut :

    Compté le nombre de commentaires(id) par news (id_news).
    1. <?php    
      include ('includes/connexion.php');     
            
        $requete = mysql_query ("SELECT [[id_news]] FROM commentaires"); 
      while($donnees = mysql_fetch_array($requete))    
      {    
       echo'<a href="commentaires.php?id_news='.$donnees['id'].'">';    
        // On récupère l'id de la news    
        $id = $donnees['id'];    
        // Connexion à la BDD    
        $connect = mysql_connect('localhost', 'root', '');    
        mysql_select_db('others');    
             
        // On fait une requête pour compter le nbre de commentaires de la news correspondant à l'id    
        $comm = mysql_query("SELECT COUNT([[ID des commentaires]]) AS nbre_comm FROM commentaires WHERE id_news='" . $id ."'");    
        $retour = mysql_fetch_array($comm);    
        $nbre_comm = $retour['nbre_comm'];    
            
        // Déconnexion    
        mysql_close($connect);    
        // On affiche le nombre de commentaires retourné par la requête    
        echo $nbre_comm;    
      }    
      ?>            
      

      Petite remarque en passant, il n'est pas recommandé d'utiliser l'étoile dans les requête MySQL, c'est une question d'optimisation, il faut plutôt sélectionner tous les champs dont on a besoin.

      Pour ce qui est de ton problème, je crois que l'erreur est dans la première requête où tu sélectionnes tout depuis la table commentaires. Donc, tu sélectionne tous tes commentaires et non les id_news que tu veux mettre dans le lien.

      Peut être que je me trompe, mais il est difficile de répondre sans une idée claire de la structure de la base de données.
      1. Bonsoir Sonia, voilà mon erreur : Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given on line 5 : while($donnees = mysql_fetch_array($requete))
        De plus j'ajoute les 2 tables :
        CREATE TABLE 'news' (
          'id' int(11) NOT NULL AUTO_INCREMENT,
          'titre' varchar(255) DEFAULT NULL,
          'auteur' varchar(255) DEFAULT NULL,
          'premier' varchar(125) DEFAULT NULL,
          'texte' varchar(1500) DEFAULT NULL,
          'jours' text,
          'numero' text,
          'mois' text,
          'annee' text,
          UNIQUE KEY 'id' ('id')
        ) ENGINE=MyISAM AUTO_INCREMENT=36 DEFAULT CHARSET=latin1


        CREATE TABLE 'commentaires' (
          'id' int(5) NOT NULL AUTO_INCREMENT,
          'id_news' int(5) NOT NULL,
          'auteur' varchar(50) NOT NULL,
          'commentaire' varchar(100) NOT NULL,
          'email' varchar(100) NOT NULL,
          'jours' text,
          'numero' text,
          'mois' text,
          'annee' text,
          PRIMARY KEY ('id')
        ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1
    2. Eastchild, tout d'abord mais de ta réponse, mais sa ne marche pas =$ Ensuite peux tu écrire en bas du message s'il te plait ^^
      1. P'tit up please =D
      2. up