comptage des réponses dans forum

comptage des réponses dans forum - Programmation

Marsh Posté le 23-08-2001 à 11:30:53    

salut à tous, j'ai une coquille dans mon script si vous pouvez m'aider...
j'ai fait un forum, il m'affiche tous les titres de message comme prévu, mais pas le nombre de réponses à ces titres.  
Ma table forum se présente ainsi:  
 
cpt   parent   titre          texte  
48      0      salut          yep,yep  
49      0      bonjour        essai du forum  
50     48      re-salut       reponse à salut  
51     49      re-bonjour     test réponse  
 
explication: le message d'origine est à 0 dans PARENT, la réponse à ce méssage donne un chiffre dans PARENT égale au CPT du méssage d'origine.  
 
questions:  
- ou est l'erreure dans mes lignes?  
- l'option "SELECT count(*)..." fonctionne-t-elle en PHP3 ou seulement en PHP4?  
 
 
<?  
//connection à la base  
include('include_connect.php3');  
 
 
$selec = "SELECT titre, cpt, parent FROM forum WHERE parent='0'";  
$resul_selec = mysql_query($selec) or die(mysql_error());  
 
$id = cpt;  
 
$compar = "SELECT Count(*) AS nombre_rep FROM forum WHERE parent = $id";  
$resul_compar = mysql_query($compar) or die(mysql_error());  
 
 
$query = "SELECT titre FROM forum WHERE parent='0'";  
$resul_query = mysql_query($query) or die(mysql_error());  
 
//Affichage du titre et du nombre de réponses  
 
while (list($titre)= mysql_fetch_row($resul_query))  
{  
echo "  
<BR>titre: $titre  
<BR>nombre réponses: $nombre_rep  
}  
 
mysql_close();  
?>  
 
voila si vous trouves une réponse ca m'aiderai beaucoup passkeu la je sèche...

Reply

Marsh Posté le 23-08-2001 à 11:30:53   

Reply

Marsh Posté le 23-08-2001 à 12:55:40    

"SELECT Count(*) AS nombre_rep FROM forum WHERE parent = $id";  
 
et avec  = '$id'


---------------
All we need is a soul revolution
Reply

Marsh Posté le 24-08-2001 à 02:29:33    

bin tu mets pas '$id' sinon l'id est traitée comme chaine de caractères et c'est un entier.
 
par contre ton code est soit incohérent et plein d'erreurs, soit il en manque la moitié... t'arrives à avoir la liste des messages avec ça ?
 
tu dois faire la query qui donne la ligne du message et pendant que tu boucle pour afficher chaque ligne, tu fais une query qui compte le nombre de message fils (where parent=$id).
 
sinon à première vue et si il manque du code, je dirais : $id = cpt; ==> $id = $cpt; ça ira déjà mieux.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-08-2001 à 09:26:55    

bon ben j'ai essayé $id = $cpt, mais ca me renvoie une erreure, ensuite j'ai ajouté parent ='$id' comme l'a conseillé kayasax  et la j'ai ça en affichage:
 
titre: bienvenue sur le forum  
nombre réponses: Resource id #31  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: titre  
nombre réponses: Resource id #31  
titre: sup  
 
 
j'ai pour essayé en fait plusieur fois le titre qui s'appelle titre, mais pourquoi il y a ressource id #31?

Reply

Marsh Posté le 24-08-2001 à 10:03:10    

Essaie un truc du genre :
 
$query = "SELECT * FROM table WHERE parent=0";
$result = mysql_db_query ($dbname,$query) or die ("Erreur de connexion à la base de donnée" );
 
while($row=mysql_fetch_object($result))
{
 $query2 = "SELECT COUNT(cpt) FROM table WHERE parent=$row->cpt";
 $result2 = mysql_db_query ($dbname,$query2) or die ("Erreur de connexion à la base de donnée" );
 $row2=mysql_fetch_row($result2);
 
 echo "Discussion : $row->titre Message : $row->texte Nombre de  réponse : ".$row2[0]." <br>";
 
 $query3 = "SELECT * FROM table WHERE parent=$row->cpt";
 $result3 = mysql_db_query ($dbname,$query3) or die ("Erreur de connexion à la base de donnée" );
 
 while($row3=mysql_fetch_object($result3))
 {  
  echo "    Réponse : $row3->titre Message : $row3->texte<br>";
 }
 echo "<br>----------------------------<br>";
}
 
?>

Reply

Marsh Posté le 24-08-2001 à 18:31:55    

ok je te remercie vraiment, enfin ca fonctionne.
tu peux pas savoir tout ce que j'ai essayé.
@+ et encore merci

Reply

Marsh Posté le 27-08-2001 à 12:06:23    

Y-a pas de quoi, par contre c'est pas optimisé (nb de requête !!!).

Reply

Marsh Posté le 27-08-2001 à 14:11:39    

Allez, la même chose avec une seule requête :
 
<?php
 
function nb_reponse($var)
{
 global $i,$parent;
 
 $nb_rep=0;
 $k=0;
 while($k<$i)
 {
  if($parent[$k]==$var)
  {
   $nb_rep++;
  }
  $k++;
 }
 return $nb_rep;
}
 
 
$query = "SELECT * FROM ta_table";
$result = mysql_db_query ($db_name,$query) or die ("Erreur de connexion à la base de donnée" );
 
$i=0;
while($row = mysql_fetch_object($result))
{
  $cpt[$i]=$row->cpt;
  $parent[$i]=$row->parent;
  $titre[$i]=$row->titre;
  $texte[$i]=$row->texte;
  $i++;  
}
 
$j=0;
while($j<$i)
{
 if($parent[$j]==0)
 {
  echo "Discussion : $titre[$j] Message : $texte[$j] Nombre de  réponse : ".nb_reponse($cpt[$j])." <br>";
  $jj=0;
  while($jj<$i)
  {
   if($parent[$jj]==$cpt[$j])
   {
    echo "    Réponse : $titre[$jj] Message : $texte[$jj]<br>";
   }
   $jj++;
  }
  echo "<br>----------------------------<br>";
 }
 $j++;
}
 
?>

Reply

Sujets relatifs:

Leave a Replay

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