Page 1 sur 1

compter le nb de commentaire

Posté : 13 juin 2007, 19:00
par djtec
Bonjour,
J'ai un script de news avec commentaire et je voudrais faire apparaitre le nombre de commentaire présent pour la news et si y a aucun commentaire ça marque pas de commentaire

Exemple:

Si 3 commentaires ça affiche "3 commentaires"

Si aucun commentaire ça affiche "pas de commentaire"

Si quelqu'un a une idée du script qu'il faudrait car j'ai rien touvé.

Merci d'avance.

Posté : 13 juin 2007, 19:38
par Cyrano
Méthode : tu récupères comment tes commentaires ? N'as-tu pas à ce moment là l'opportunité de les compter et de stocker ce nombre dans une variable ? Ensuite, avec une alternative vérifiant que ce nombre est ou non supérieur à zéro, tu peux définir ce qu'il y a lieu d'afficher.

Posté : 13 juin 2007, 20:04
par djtec
Voici mon script
<? 
$nb = $board_newspg;


if (!isset($_GET['page'])) $page = 1;
else $page = intval($_GET['page']);

if (!isset($_GET['total']))
{
$sql = "select count(*) as qte from ".$prefixe."_news";
$p = @mysql_query($sql,$c);
$total = @mysql_result($p,'0','qte');
}
else $total = intval($_GET['total']);

$debut = ($page - 1) * $nb;
		

$sql = "SELECT *, DATE_FORMAT(date, '%M') as mois, DATE_FORMAT(date, '%d') as jour, DATE_FORMAT(heure, '%H:%i') as heure FROM ".$prefixe."_news ORDER BY id DESC";

if($p = @mysql_query($sql,$c)){
$i = 1;
while($resultat = @mysql_fetch_array($p)){

$resultat['titre'] = substr($resultat['titre'], 0, 60);

include ('includes/function_bbcode.php');

$max=140; 
if(strlen($texte)>=$max){$texte=substr($texte,0,$max); 
$espace=strrpos($texte," "); 
$texte=substr($texte,0,$espace)."..."; } 

echo'
<div class="post" id="post-'.stripslashes($resultat['id']).'">
	<div class="date"><span>'.stripslashes($resultat['mois']).'</span> '.stripslashes($resultat['jour']).'</div>
		<div class="title">
          <h3><a href="index.php?name=view_news&id='.stripslashes($resultat['id']).'" title="'.stripslashes($resultat['titre']).'">'.stripslashes($resultat['titre']).'</a></h3>
          <div class="postdata"><span class="category">Posté à '.stripslashes($resultat['heure']).'</span> <span class="comments"><a href="index.php?name=view_news&id='.stripslashes($resultat['id']).'#comment" title="Commentaires sur '.stripslashes($resultat['titre']).'">No Comments »</a></span></div>
		  </div>
          <div class="entry">
            <p>'.$texte.'</p>
          </div>
          <div class="suite">
            <span class="txt"><a href="index.php?name=view_news&id='.stripslashes($resultat['id']).'" title="'.stripslashes($resultat['titre']).'">[Lire la suite]</a></span>
          </div>
</div>
<br />
';
$i++;
}

echo'';

if($total < 1) echo'
<div align="center">
<table cellpadding="0" cellspacing="0" align="center" width="685">
	<tr>
		<td align="center">Aucune news pour le moment.</td>
	</tr>
</table>
</div>
';

// calcul du nombre de pages
		 $nbpages = ceil($total / $nb); // arrondi a l'entier superieur
		 // on affiche les pages
echo'<div align="right">';	
$page_moins_un = $page-1;
if($page_moins_un >= 1) 
{
echo'<a href="?name=news&page='.$page_moins_un.'&total='.$total.'" class="page">«</a>&nbsp;&nbsp;';
}
							
for($i = 1;$i <= $nbpages;$i ++)
{
echo'<a href="?name=news&page='.$i.'&total='.$total.'" class="page">'.$i.'</a>&nbsp;&nbsp;';
if($i < $nbpages) echo '';
}

$page_plus_un = $page+1;
if($page_plus_un <= $nbpages) 
{
echo'<a href="?name=news&page='.$page_plus_un.'&total='.$total.'" class="page">»</a>';
}

echo'</div>';
$i++;
}
mysql_close();
?>
J'ai cette fonction qui sert a compter le nombre de news pour l'affichage par page
if (!isset($_GET['total']))
{
$sql = "select count(*) as qte from ".$prefixe."_news";
$p = @mysql_query($sql,$c);
$total = @mysql_result($p,'0','qte');
}
else $total = intval($_GET['total']);
Mais cette fonction indique 0 s'il y a rien je ne sais vraiment pas comment faire désoler.

Posté : 13 juin 2007, 20:19
par Cyrano
Commence par virer les "@" devant tes fonctions, s'il y a des erreurs, il faut les voir.

Ensuite, il y a ceci :
$total = mysql_result($p,'0','qte');
Tu envoies trois paramètres dans une fonction qui n'en attend que deux :
Essaye en mettant à la place :
$total = mysql_result($p, 0);
Enfin, tu as un :
if($total < 1)
Où donc est le "else" qui devrait suivre pour traiter l'autre option "Il y a n commentaires" :?:

Posté : 13 juin 2007, 21:07
par djtec
La le script que j'ai mit compte le nmbre de news et non le nombre de commentaire la fonction de comptage est la pour l'affichage sur plusieur page si y a besoin.

Je sais pas du tout comment faire pour l'affichage du nb de commentaire car il faudrait un script du genre
if (!isset($_GET['total']))
{
$comment = le code du comptage de nb de commentaire
}
else
$comment = 'Pas de commentaire';
J'espère avoir été assez expliciste dans le genre de script car c'est dur a expliquer quand on connait pas

Posté : 13 juin 2007, 21:58
par Cyrano
Et pourquoi ne fias-tu pas le comptage des commentaires en même temps dans la même requête qui compte les news ? Avec une jointure, ça pourrait très bien se faire.

Posté : 13 juin 2007, 22:10
par djtec
Oui pourquoi pas mais je ne sais pas du tout comment faire la requete ni l'affichage

Posté : 13 juin 2007, 22:15
par Cyrano
Ça se fait avec une clause GROUP BY

Il faudrait avoir la structure de tes tables et comment elles sont liées pour savoir où compter les news et où compter les commentaires.

Posté : 13 juin 2007, 23:48
par djtec
Voici la table news

Code : Tout sélectionner

CREATE TABLE `sg__news` ( `id` int(11) NOT NULL auto_increment, `titre` text NOT NULL, `texte` text NOT NULL, `date` date NOT NULL default '0000-00-00', `heure` time NOT NULL default '00:00:00', PRIMARY KEY (`id`) ) TYPE=MyISAM ;
Voici la table comment

Code : Tout sélectionner

CREATE TABLE `sg__comment` ( `id` int(11) NOT NULL auto_increment, `id_news` varchar(255) NOT NULL default '', `pseudo` varchar(255) NOT NULL default '', `email` varchar(255) NOT NULL default '', `titre` varchar(255) NOT NULL default '', `texte` text NOT NULL, `date` date NOT NULL default '0000-00-00', `heure` time NOT NULL default '00:00:00', PRIMARY KEY (`id`) ) TYPE=MyISAM ;

Posté : 14 juin 2007, 06:55
par Cyrano
Bon, ben tu fais une requête comme ceci :

Code : Tout sélectionner

SELECT n.id AS news, COUNT(c.id) AS total_reponses FROM sg__news n LEFT OUTER JOIN sg__comment c ON n.id = c.id_news GROUP BY news;
Tu vas obtenir une ligne par news : un mysql_num_rows() va te donner le nombre de news et pour chaque ligne, la seconde donnée sera le nombre de réponse par sujet.

Posté : 14 juin 2007, 09:02
par djtec
En faites j'ai trouvé hier soir mais a cause du mod qui interdit le double post je pouvais pas repondre désolé

J'ai fait comme ceci
while($resultat = mysql_fetch_array($p)){

$resultat['titre'] = substr($resultat['titre'], 0, 60);

include ('includes/function_bbcode.php');


if (!isset($_GET['comment']))
{
$sqlc = "select count(id_news) as qte from ".$prefixe."_comment where id_news='".stripslashes($resultat['id'])."'";
$pc = mysql_query($sqlc,$c);
$comment = mysql_result($pc, 0);
}
else 
$comment = intval($_GET['comment']);


$max=140; 
if(strlen($texte)>=$max){$texte=substr($texte,0,$max); 
$espace=strrpos($texte," "); 
$texte=substr($texte,0,$espace)."..."; } 

echo'
<div class="post" id="post-'.stripslashes($resultat['id']).'">
	<div class="date"><span>'.stripslashes($resultat['mois']).'</span> '.stripslashes($resultat['jour']).'</div>
		<div class="title">
          <h3><a href="index.php?name=view_news&id='.stripslashes($resultat['id']).'" title="'.stripslashes($resultat['titre']).'">'.stripslashes($resultat['titre']).'</a></h3>
          <div class="postdata"><span class="category">Posté à '.stripslashes($resultat['heure']).'</span> <span class="comments">';
		  if ($comment == 0){ echo 'Aucun commentaire';} 
		elseif($comment == 1){ echo '<a href="index.php?name=view_comment_news&id='.stripslashes($resultat['id']).'">Un seul commentaire</a>';} 
		else {echo '<a href="index.php?name=view_comment_news&id='.stripslashes($resultat['id']).'">'.$comment.' commentaires</a>';}echo' »</span></div>
		  </div>
          <div class="entry">
            <p>'.$texte.'</p>
          </div>
          <div class="suite">
            <span class="txt"><a href="index.php?name=view_news&id='.stripslashes($resultat['id']).'" title="'.stripslashes($resultat['titre']).'">[Lire la suite]</a></span>
          </div>
</div>
<br />
';
Et sa fonctionne nikel

Je te remerci Cyrano

++