Pb : Afficher le nombre de commentaire

Résolu
punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008 - 21 avril 2005 à 00:53
punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008 - 1 juin 2005 à 22:27
Bonjour,

J'ai un petit (enfin un gros depuis le temps ou je suis dessus)
problème. J'ai réalisé une page dynamique ou je recupere des info d'une
table "actualites" avec :

`ID` tinyint(4) NOT NULL auto_increment,
`titre` varchar(150) NOT NULL default '',
`auteur` text NOT NULL,
`texte` text NOT NULL,
`date` varchar(20) NOT NULL default '',
`photo` varchar(50) NOT NULL default 'photo0.jpg',
PRIMARY KEY (`ID`)


Pour chaque actualites j'ai des commentaires (sur une autre page) avec la table "commentaire" :

`id_comm` tinyint(4) NOT NULL auto_increment,
`auteur` varchar(15) NOT NULL default '',
`email` varchar(15) NOT NULL default '',
`texte` text NOT NULL,
`date` varchar(21) NOT NULL default '',
`id_news` tinyint(4) NOT NULL default '0',


Dans ma page j'ai bien la liaison entre l'ID actualites et l'id_news de
commentaire (afin que le commentaire corresponde bien avec l'actualité id_news=ID).

Jusque la tout va bien.



Le soucie c'est que ma page est crée sous dreamweaver, les actualités
s'affiche dans un tableau dynamique répété, et que je n'arrive pas a
afficher le nombre de commentaire pour chaque actualité.


Mes donnés s'afficher dans un tableau sous la forme : <?php echo $row_rsActualites['titre']; ?>

et le liens vers la page des commentaires :

commentaire.php?id_news=<?php echo $row_rsActualites['ID']; ?>



Voici le debut de mon code.



<?php require_once('../../Connections/Punkcity.php'); ?>

<?php

$currentPage = $_SERVER["PHP_SELF"];

?>

<?php

$maxRows_rsActualites = 10;

$pageNum_rsActualites = 0;

if (isset($_GET['pageNum_rsActualites'])) {

$pageNum_rsActualites = $_GET['pageNum_rsActualites'];

}

$startRow_rsActualites = $pageNum_rsActualites * $maxRows_rsActualites;



mysql_select_db($database_Punkcity, $Punkcity);

$query_rsActualites = "SELECT * FROM actualites ORDER BY ID DESC";

$query_limit_rsActualites = sprintf("%s LIMIT %d, %d", $query_rsActualites, $startRow_rsActualites, $maxRows_rsActualites);

$rsActualites = mysql_query($query_limit_rsActualites, $Punkcity) or die(mysql_error());

$row_rsActualites = mysql_fetch_assoc($rsActualites);



if (isset($_GET['totalRows_rsActualites'])) {

$totalRows_rsActualites = $_GET['totalRows_rsActualites'];

} else {

$all_rsActualites = mysql_query($query_rsActualites);

$totalRows_rsActualites = mysql_num_rows($all_rsActualites);

}

$totalPages_rsActualites = ceil($totalRows_rsActualites/$maxRows_rsActualites)-1;



$colname_rsCommentaireID = "1";

if (isset($_GET['id'])) {

$colname_rsCommentaireID = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);

}

mysql_select_db($database_Punkcity, $Punkcity);

$query_rsCommentaireID sprintf("SELECT * FROM commentaire WHERE id_news %s", $colname_rsCommentaireID);

$rsCommentaireID = mysql_query($query_rsCommentaireID, $Punkcity) or die(mysql_error());

$row_rsCommentaireID = mysql_fetch_assoc($rsCommentaireID);

$totalRows_rsCommentaireID = mysql_num_rows($rsCommentaireID);



$queryString_rsActualites = "";

if (!empty($_SERVER['QUERY_STRING'])) {

$params = explode("&", $_SERVER['QUERY_STRING']);

$newParams = array();

foreach ($params as $param) {

if (stristr($param, "pageNum_rsActualites") == false &&

stristr($param, "totalRows_rsActualites") == false) {

array_push($newParams, $param);

}

}

if (count($newParams) != 0) {

$queryString_rsActualites = "&" . htmlentities(implode("&", $newParams));

}

}

$queryString_rsActualites = sprintf("&totalRows_rsActualites=%d%s", $totalRows_rsActualites, $queryString_rsActualites);

?>



Quelqu'un pourrait il m'aider afin que j'arrive à avoir le nombre
d'avis pour chaque commentaire (et non pas le meme resultat pour toute
les acutalites -exemple : 3 commentaires pour toute les actu- ?).



Merci par avance



PS : j'espere que j'ai été assez claire et pas trop fouillie, sinon peut donner plus de renseignement si il faut

6 réponses

punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008
1 juin 2005 à 22:27
Finalement j'ai trouvé après de longues heures de recherche (comme toujours c'est plus simple que je pensais).



La partie qui gére le lien entre la page actu et mysql et avec la
pagination (a vous de faire après l'affichage de la page avec les "
echo $row_rsActualites['ID']; echo $row_rsActualites['titre']; "...





<?php

$currentPage = $_SERVER["PHP_SELF"];



$maxRows_rsActualites = 7;

$pageNum_rsActualites = 0;

if (isset($_GET['pageNum_rsActualites'])) {

$pageNum_rsActualites = $_GET['pageNum_rsActualites'];

}

$startRow_rsActualites = $pageNum_rsActualites * $maxRows_rsActualites;



mysql_select_db($database_connexion, $connexion);

$query_rsActualites = "SELECT ID, titre, auteur, texte, `date`, photo, groupeID FROM actualites ORDER BY ID DESC";

$query_limit_rsActualites = sprintf("%s LIMIT %d, %d", $query_rsActualites, $startRow_rsActualites, $maxRows_rsActualites);

$rsActualites = mysql_query($query_limit_rsActualites, $connexion) or die(mysql_error());

$row_rsActualites = mysql_fetch_assoc($rsActualites);



if (isset($_GET['totalRows_rsActualites'])) {

$totalRows_rsActualites = $_GET['totalRows_rsActualites'];

} else {

$all_rsActualites = mysql_query($query_rsActualites);

$totalRows_rsActualites = mysql_num_rows($all_rsActualites);

}

$totalPages_rsActualites = ceil($totalRows_rsActualites/$maxRows_rsActualites)-1;



$colname_rsNbcomm = "1";

if (isset($_GET['ID'])) {

$colname_rsNbcomm = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);

}

mysql_select_db($database_connexion, $connexion);

$query_rsNbcomm sprintf("SELECT * FROM commentaire WHERE id_news %s", $colname_rsNbcomm);

$rsNbcomm = mysql_query($query_rsNbcomm, $connexion) or die(mysql_error());

$row_rsNbcomm = mysql_fetch_assoc($rsNbcomm);

$totalRows_rsNbcomm = mysql_num_rows($rsNbcomm);







$queryString_rsActualites = "";

if (!empty($_SERVER['QUERY_STRING'])) {

$params = explode("&", $_SERVER['QUERY_STRING']);

$newParams = array();

foreach ($params as $param) {

if (stristr($param, "pageNum_rsActualites") == false &&

stristr($param, "totalRows_rsActualites") == false) {

array_push($newParams, $param);

}

}

if (count($newParams) != 0) {

$queryString_rsActualites = "&" . htmlentities(implode("&", $newParams));

}

}

$queryString_rsActualites = sprintf("&totalRows_rsActualites=%d%s", $totalRows_rsActualites, $queryString_rsActualites);

?>



La partie qui génére le nombre de commentaire



[# ','_blank','toolbar=0, location=0,
directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0,
menuBar=0, width=460, height=600');return(false)" class="Noir7">Voir
/ Ecrire un commenter]

[

<?php mysql_select_db($database_connexion, $connexion);

$news = $row_rsActualites['ID'];

$result mysql_query("select count(*) as id_news from commentaire where id_news
'$news'");

$data = mysql_fetch_array($result);

$total = $data['id_news'];

echo $total ?>]
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 avril 2005 à 10:22
Hello,



il est difficile a lire ton code.

Si tu as toujours le meme nombre de commentaires, c'est soit que ta requete est mauvaise, soit mal placee.

A priori :

Tu vas chercher ta news, puis dans la boucle sur cette requete, tu vas
chercher les commentaires associes. Tu affiches le tout (avec un
num_rows sur les commentaires, par exemple, pour avoir le nombre de
commentaires associes a cette news). Retour a la boucle de la requete
sur les news.

Au passage, evite les SELECT *

Il vaut toujours mieux nommer les champs dont tu as besoin, quand bien
meme aurais-tu besoin de TOUS les champs de ta table. C'est moins lourd
pour le serveur.
0
punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008
21 avril 2005 à 12:14
Merci pour ton astuce.

Je vais essayer ton conseil pour retourner la requete sur la news et en meme tant pour les Select.

J'ai aussi peut etre oublié un detaille. Après le code php si dessus, j'ai du html ou j'affiche du php.

Merci en tout cas.
0
punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008
21 avril 2005 à 16:04
Finalement j'ai changé mon code. J'arrive bien a avoir le bon nombre de commentaire.

Je souhaite afficher par page 10 actualites et avoir une barre de navigation pour le reste (avec suivant, precedent...).

Le nouveau soucie c'est que avec mon nouveau code j'ai l'impression
qu'il n'est pas possible d'afficher une barre de navigation :



<?php require_once('../../Connections/Punkcity.php'); ?>
<?
$ma_table="actualites";
$ma_table4="commentaire";




// On commence par récupérer les news elles-mêmes



mysql_select_db($database_Punkcity, $Punkcity);


$extraire = mysql_query("select * from $ma_table order by id DESC");


$occurrences = mysql_numrows($extraire);


if($occurrences<10) $nbrnews=$occurrences;


else $nbrnews=10;



// On entre alors dans une boucle qui affiche les 5 dernières news


for ($i=0 ; $i<$nbrnews ; $i++) {


$id_news = mysql_result($extraire,$i,"id");


$titre_news = mysql_result($extraire,$i,"titre");


$texte = mysql_result($extraire,$i,"texte");


$auteur= mysql_result($extraire,$i,"auteur");


$date= mysql_result($extraire,$i,"date");


$photo= mysql_result($extraire,$i,"photo");





$comment = mysql_query("select * from $ma_table4 where id_news='$id_news'");


$nbrcomment = mysql_numrows($comment);



// Il ne nous reste plus qu'à afficher !


echo "<table width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">

----,
$titre_news
par $auteur - le $date</td>

$texte,

Commenter [$nbrcomment avis]
</td></tr></table>";


}


?>


<link href="../../styles/style.css" rel="stylesheet" type="text/css">



<style type="text/css">


<!--


.Style24 {


font-family: Verdana, Arial, Helvetica, sans-serif;


font-size: 10px;


font-style: italic;


color: #FFFFFF;


}


.Style29 {font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif;}


.Style31 {font-size: 9px}


.Style33 {font-size: 9px; font-style:normal; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight:normal;}


.Style35 {


font-size: 12px;


font-family: Verdana, Arial, Helvetica, sans-serif;


font-weight: bold;


color: #FFFFFF;


}


-->
</style>


Quelqu'un pourrait il m'aider a la realiser afin que je puisse afficher 10 actu et ensuite avoir la barre.



Merci d'avance :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 avril 2005 à 16:14
Si si, avec le meme procede que tu utilisais dans tonprecedent code :
LIMIT, et faire bouger le pointeur sur LIMIT en fonction des clics sur
suivant ou precedent (par exemple).
0
punkcity Messages postés 28 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 11 avril 2008
21 avril 2005 à 16:23
<!--StartFragment --> Merci encore une fois pour ta reponse aussi rapide.
Je vais mit atteler dès maintenant en essayant de pas trop me galerer.
0
Rejoignez-nous