Il te suffit pour afficher le nombres de commentaires de faire un requêtes sur ta table de commentaires et d'utiliser COUNT (*) AS nbComments par exemple, et pour la suite l'affichage dans une pop-up je te conseil d'utiliser AJAX !
Bonjour,
Je suis actuellement en train de créer un blog.
Actuellement j'ai la page index avec la liste des articles. Puis quand je clique sur le titre d'un article, je suis redirigé sur la page article ( avec son id correspondant ) : l'article s'y trouve et en fin de cette page il y a l'affichage et l'ajout de commentaires.
J'aimerais pouvoir sur la page index, en dessous de chaque article, un lien '' Il y a x commentaires " et quand on clique dessus, la liste des commentaires s'affiche ( sois en dessous, sois dans une pop-up ) avec l'ajout du formulaire .
Le but est de tout regrouper sur la page index et de supprimer la page article.
Code de Index.php
article.php :
Merci pour votre aide !
7 réponses
euh... un while ou un foreach sur un retour de requette qui te ressort un COUNT ca sert a rien... t'aura tjrs une seule ligne... d'ailleur, vaut mieux faire un COUNT(id) par exemple qu'un COUNT(*) (qui est un peu plus long a traiter...)
Bonjour, J'ai essayé d'intégrer ma page 'article' à celle d'index . Cependant j'ai une erreur à chaque fois, et je ne sais pas où mettre ma boucle while : J'ai essayé plusieurs endroits, toujours une erreur..
Et comment j'ai essayé, mais il y a une erreur aussi :
J'ai vraiment besoin de votre aide. Je débute, et j'ai le nez dedans ..
Pourquoi u fait un while... essais avec foreach.
bonjour je me suis inscript sur le site car je suis tombé par hasard sur ton post.
Je vais essayer de t'aider. Le but est que tu comprenne comment sa fonctionnne pour qu'ensuite tu t'ensort tout seul la prochaine fois.
J'espère que l' arichitecture de ta base de données est telle sortes que si je commente un article alrs dans la table commentaire il ya un champ ou je recupère l'id de l'article(C'est pour lier un article a un commentaire). Si c'est le cas alors on peut continuer.
Juste pour l'exemple créer une nouvelle base de données avec deux tables(Juste pour l'exemple sa ne te prendra que 2 minutes).
Un première table "tarticle" qui aura pour champs (id, article, cmpt) et une deuxième table qui aura pour champs (id, comments, idfkarticle)
Tous les champs "id" sont en auto_increment.
Le champ "idfkarticle" permet de lier un article à un commentaire. Si l'on commente un article, alors on affecte l'id de l'aricle dans ce champ la(dans mon script je n'ai pas gerer ce cas la).
Le champ "cmpt" permet de calculer le nombre de commentaire en fonction de chaque article. Il s'implemnt automatiquement.
Ensuite fais un copier coller de ce script dans une page et execute pour voir le resultat.
[](<?php
//Pour me connecter à la base de données "grafiktar"
$serveur="localhost";
$login="root";
$pass="";
$dbname="grafiktar";
try{
$connexion = new PDO("mysql:host=$serveur; dbname=$dbname", $login, $pass);
$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Fin de la connexion a la base de données
//Dans la table "tarticle" je selectionne tous les articles
$select = $connexion->prepare('SELECT * FROM tarticle');
$select->execute();
//Cette condition c'est pour faire la pagination; c'est a dire que si je clique sur le nombre de commantaire d'un article dans le but de l'afficher une nouvelle page sera crééer pour n'afficher que les commentaires concernant cet article
if(isset($_GET['commentaire'])){
$commentaire = $_GET['commentaire'];//Je recupère ici l'identifiant du commentaire pour ensuite faire la requete qui suit pour ne selectionner que les commentaires de cet identifiant
$affichage = $connexion->prepare('SELECT * FROM comments WHERE idfkarticle=?');
$affichage->execute([$commentaire]);
?>
<h2>Commentaires:</h2>
<?php
while($allcomments = $affichage->fetch(PDO::FETCH_OBJ)){//Cette boucle affiche tous les commentaires de l'article
echo $allcomments->comments.'<br>';
}
}
//Ce else parce que si l'on ne clique par sur le nombre de commentaire d'un article alors tous les articles avec leur nombres de commentaire s'afficheront
else{
/*Cette grande boucle affiche tous les articles avec leur nombre de commentaire
*C'est ici que commence vraiment l'exemple a suivre pour essayer de resoudre ton problème*/
while($s=$select->fetch(PDO::FETCH_OBJ)){//plus haut, j'ai effectuer une requete "select" pour afficher tous les articles
//Je stocke tous les enregistrement dans la variable < $s >;
echo 'Nom de l\'article : '.$s->article.'<br>';//J'affiche ici tous les article;
$idarticle = $s->id;//Je stocke l'identifiant de l'article dans idarticle
//J'effectue la requete ci-dessous, pour afficher tous les commentaires en fonction de de l'article.
$a = $connexion->prepare('SELECT * FROM comments WHERE idfkarticle=?');
$a->execute([$idarticle]);
//Le script ci-dessous permet de compter le nombre de commentaire relative a un article
$sql = $connexion->prepare('SELECT COUNT(*) FROM comments WHERE idfkarticle=?');
$sql->execute([$idarticle]);
$resultat =$sql->fetchAll();
$insrt = $resultat[0][0];//Pour afficher le nombre de commentaire. Ex: 2 commentaire, 4 commentaire...
//Avec le nombre de commentaire j'implemente ce nombre dans la table commentaire. Cela me permettra par la suite d'afficher tous les commentaires d'un articles
$insertion = $connexion->prepare('UPDATE tarticle SET cmpt=? WHERE id=?');
$insertion->execute([$insrt, $idarticle]);
?>
<!--Pour afficher un lien dans lequel on va visualiser le nombre de commenrtaire-->
<a href="?commentaire=<?php echo $idarticle; ?>"> <?php echo 'Pour cet article, il y\'a : '.$insrt.' commentaire(s)';?></a><br>
<?php
echo '<br><br><br><br><br>';
}
//Fin de la boucle
}
//Ce bloc, c'est pour afficher un message d'erreur
}
catch(exception $e){
echo 'Attention message d\'erreur: '.$e->getMessage();
}
?>)
J'ai allerger ce scrip pour la comprehension, bien sur on peut l'ameliorer.
N'oublie pas, lit et rélit le script avec les commentaire.
A+
Un énorme merci pour ce code très détaillé, simple et super compréhensible : Je le garde en mémoire car très très utile. Merci merci !
Bonjour,
Je suis ravie d'avoir pu t'aider DEV.
Au plaisir de te recroiser.
À bientôt !
ADAMA