Ma variable me renvoi array
RésoluJ'ai créer un système de news et un autre de commentaire.
Ma table commentaires
id | idnews | pseudo | message
idnews correspond à l'id de la news pour savoir quel message va a quel news
Moi je souhaite que à coter du lien ou je clic pour écrire un commentaire il y est le nombre de commentaire.
J'ai essayer et ma variable me renvoi Array.
Voici mon code.
$retour = mysql_query('SELECT COUNT(*) AS nb_new FROM news');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_new'];
$nombreDeMessagesParPage = 7; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_new FROM news');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_new'];
// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
if (isset($_GET['page']))
{
$page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On se met sur la page 1 (par défaut)
}
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
$reponse = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT '. $premierMessageAafficher.','.$nombreDeMessagesParPage.'') or die('Erreur :'.mysql_error());
$retourr = mysql_query('SELECT COUNT(*) AS nb_message FROM commentaires WHERE idnews=\''.$donnees['id'].'\'');
$nbcom = mysql_fetch_array($retourr);
while ($donnees = mysql_fetch_array($reponse))
{
$profil = mysql_query('SELECT * FROM connexion WHERE pseudo=\''.$donnees['auteur'].'\'');
$profil2 = mysql_fetch_array($profil);
echo '<p><h3 id="newws" style=" ">' . $donnees['titre'] . '</h3> <p style="font-size: small; text-align: right;" class="auteur">Ecrit par <a style="color: gray;" href="affichage_profil.php?membre='.$profil2['id'].'">' .$donnees['auteur'] . '</a> le ' . date('d/m/Y à H\hi', $donnees['timestamp']) . ' </p> ' . $donnees['contenu'] = bbcode($donnees['contenu']) . '</p><br/><a style="color: #79A325;" href="commentaires.php?id_news=' .$donnees['id']. '">Commentaires '.$nbcom.'</a><br/>';
}
echo ' <br/> Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
}
Configuration: Windows Vista Firefox 3.5
27 réponses
Le fil porte sur l'affichage du nombre de commentaires par article dans une pagination PHP/MySQL et sur l'utilisation de COUNT pour récupérer ce chiffre à côté du lien de chaque news. Des réponses soulignent que COUNT renvoie un tableau via mysql_fetch_array, et que le comptage doit être effectué à l'intérieur de la boucle pour utiliser l'ID de chaque news. En pratique, il faut déplacer la requête SELECT COUNT(*) AS nb_message FROM commentaires WHERE idnews=... à l'intérieur du while et lire le résultat avec un indice correct, par exemple nb_message ou [0]. Les échanges montrent également que l'affichage du nombre de commentaires pour chaque news peut nécessiter la récupération du nombre via nbcom[0] ou nbcom['nb_message'], selon le fetch utilisé.
-
De rien. Bonen continuation :)
-
Ok, merci quand même.
-
Rigolo :D
Oui, il y avait bien la ligne... mais pas telle que tu l'indiques dans ton message 22. En réalité, elle venait APRÈS l'endroit où tu utilisais le résultat dans une requête. Donc $donnees[id'] n'existait pas au moment où tu t'en servais.
Par contre, après avoir remis la requête à sa place, c'est à dire après le while ($donnees = mysql_fetch_array($reponse) ), maintenant $donnees[id'] est défini au moment de s'en servir et ça marche. -
Regarde plutôt
while ($donnees = mysql_fetch_array($reponse) ) -
$reponse = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT '. $premierMessageAafficher.','.$nombreDeMessagesParPage.'') or die('Erreur :'.mysql_error());
$donnees = mysql_fetch_array($reponse)
Justement non, je viens de relire ton 1er message, tu n'avais pas $donnees = mysql_fetch_array($reponse)
Enfin, ça marche, c'est l'essentiel. -
Pour ton premier message.
Je me sert de sa pour afficher mes news donc obligatoirement j'ai l'id vu que je récupère les infos.
$reponse = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT '. $premierMessageAafficher.','.$nombreDeMessagesParPage.'') or die('Erreur :'.mysql_error());
$donnees = mysql_fetch_array($reponse)
Pour ton deuxième message je vais essayer.
Edit: Sa marche.
Décidément je doit je remercier deux fois le père :)
Merci beaucoup -
Je crois que je viens de comprendre...
Ton $retourr=... et $nbcom=... devraient être à l'intérieur du while, et non pas juste avant ! -
$donnees['id'] correpond à l'id de la news.
de quelle news ? je ne vois pas où tu l'initialises, donc (sauf si j'ai mal vu) elle est vide, donc tu cherche des commentaires dont l' idnews est vide. Comme ils ont tous (je suppose) un idnews non vide, tu n'en trouves aucun.
Si tu veux afficher les commentaires correspondant à un idnews, il faut bien que tu dises auquel ! Et je ne vois pas où tu le dis. -
Non je compte les messages dans commentaire ou idnews est égale à l'id de la news.
$retourr = mysql_query('SELECT COUNT(*) AS nb_message FROM commentaires WHERE idnews=\''.$donnees['id'].'\'');
$donnees['id'] correpond à l'id de la news.
Oui je sais que $donnees ne contient pas d'idnews. Je l'ai mis quelques part ? -
Remarque : je n'avais pas remarqué que tu avais utilisé un alias, tu peux donc écrire $nbcom['nb_message'] au lieu de $nbcom[0], c'est plus propre (même si ça ne change pas grand chose)
-
Il y a un problème dans ta requête. Tu comptes les news WHERE idnews=\''.$donnees['id'].'\''); mais $donnees ne contint pas d'idnews... c'est le résultat d'un SELECT COUNT *
-
Si j'ai bien sais que mysql_fetch_array me donne un array si je le met seul, mais ne sachant pas quoi récupérer je l'ai mis tout seul.
Maintenant j'ai essayé votre proposition $nbcom[0] et sa m'affiche 0 à toutes les news.
@ozimandias Je veut bien essayer mais a quoi sert ceci mysql_num_rows je ne l'ai jamais utilisé pour le moment.
Edit: ozimandias: Sa ne marche pas. -
Pourquoi ça afficherait toujours 0 ? Si ta requête te retourne un nombre, ça va afficher ce nombre.
J'ai l'impression que tu n'as pas encore saisi que le mysql_fetch_array te retournait TOUJOURS un array (sauf quand il n'y a plus rien), même s'il y a un seul nombre dans la réponse. Et de même que tu utilises les informations extraites avec mysql_fetch_array avec un indice (par exemple tu utilises $donnes['auteur'], pas $donnees tout court), tu dois utiliser un indice pour accéder au contenu de $nbcom. Et comme il y a un seul élément, cet indice c'est 0 -
Essaye ça:
$retourr = mysql_query('SELECT * FROM commentaires WHERE idnews=\''.$donnees['id'].'\''); $nbcom = mysql_num_rows($retourr); // ici, $nbcom contient le nombre d'enregistrements présents dans ta requète -
Si je met $nbcom[0] cela va m'afficher 0 à toutes les news alors que certaine ont déjà des commentaires.
@moderno31 Ok pas de souci merci quand même. -
Suit ce que te dis le père.. J'avoue etre un peu perdu là
-
Comme je l'ai mis dans mon premier message, il faudrait que tu affiches $nbcom[0] et non pas $nbcom :
...href="commentaires.php?id_news=' .$donnees['id']. '">Commentaires '.$nbcom[0].'</a><br/>'; -
Je ne vois pas de soucis dans le code, il faudrait que je l'exécute et que je vois.
S'il te renvoie "array" c''est qu'il n'a pas su le lire ou parce qu'il est vide.
Là j'ai pas le temps de renconstituer ton environnement. Y'a pas un message d'erreur ? Décrit moi exactement ce qui se passe quand tu exécute la page en question (page blanche, erreur, juste array ??) -
Alors la ligne c'est le echo et a la variable $nbcom
$reponse = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT '. $premierMessageAafficher.','.$nombreDeMessagesParPage.'') or die('Erreur :'.mysql_error());
$retourr = mysql_query('SELECT COUNT(*) AS nb_message FROM commentaires WHERE idnews=\''.$donnees['id'].'\'');
$nbcom = mysql_fetch_array($retourr);
while ($donnees = mysql_fetch_array($reponse))
{
$profil = mysql_query('SELECT * FROM connexion WHERE pseudo=\''.$donnees['auteur'].'\'');
$profil2 = mysql_fetch_array($profil);
echo '<p><h3 id="newws" style=" ">' . $donnees['titre'] . '</h3> <p style="font-size: small; text-align: right;" class="auteur">Ecrit par <a style="color: gray;" href="affichage_profil.php?membre='.$profil2['id'].'">' .$donnees['auteur'] . '</a> le ' . date('d/m/Y à H\hi', $donnees['timestamp']) . ' </p> ' . $donnees['contenu'] = bbcode($donnees['contenu']) . '</p><br/><a style="color: #79A325;" href="commentaires.php?id_news=' .$donnees['id']. '">Commentaires '.$nbcom.'</a><br/>';
} -
Pas de souci je vois que tu nous aime bien, le père et moi vu le nombre de massages lol
Tu peux me dire à quelle ligne se situe ton problème de "array" ; il se peut qu'il y ait un rapport avec une boucle.
- 1
- 2