Select count(*) from ... where ... && ... && ...

Résolu/Fermé
rolly41 Messages postés 242 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 18 septembre 2023 - Modifié par rolly41 le 17/05/2013 à 23:15
 Profil bloqué - 18 mai 2013 à 11:11
Bonjour,

Je souhaite afficher à mes membres le nombre de message privé non lu qu'ils ont reçus, pour cela, j'utilise cette requête :
$sql = 'SELECT COUNT(*) FROM messages_prive WHERE destinataire="'.$id.'" && etat="non lu" && destinataire_del="off"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($req);
if($data[0])
{
echo '(<font color="#009900">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}
else
{
echo '<font color="#ff0000">MP Indisponible</font> | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}


Voici ce qui s'affiche : MP Indisponible

Informations :
La table et les champs existent tous.
J'ai l'erreur uniquement si aucune ligne correspond à ma recherche.

Où aurais-je pus faire une erreur ?

2 réponses

MrYAU31 Messages postés 3808 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 8 juillet 2017 1 611
17 mai 2013 à 22:52
Bonjour,

Pour tester si tu as un résultat, tu fais
if($data[0])

Essaye plutôt
if(mysql_num_rows($req)>0)

Ça t'indiquera si tu as au moins 1 ligne en retour. Pense également à tester les erreurs de requête avant. C'est plus propre ;-)
0
Non ! Sa requête c'est SELECT COUNT(*) FROM... Il y a une ligne de réponse et une seule. Il est inutile de tester mysql_num_rows
Et il teste bien l'erreur dans l'exécution de la requête.
0
MrYAU31 Messages postés 3808 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 8 juillet 2017 1 611
17 mai 2013 à 23:00
Oups, j'ai lu trop vite. Désolé.
Du coup, je vois pas l'intérêt du test sur $data[0]...
0
rolly41 Messages postés 242 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 18 septembre 2023 1
17 mai 2013 à 23:09
je viens de remettre des lignes dans la table et cela fonctionne, mais j'ai MP Indisponible SI il n'y a aucune ligne qui correspond à la requête que je viens de faire ...

Pourquoi ai-je "MP Indisponible" au lieu de "(0) MP non lu"
0
Ysabe_l Messages postés 12454 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 23 avril 2024 274
17 mai 2013 à 23:18
Il me semble que c'est parce que tu lui dis que si il y a un résultat (donc au moins un MP) d'afficher le nombre et si il n'y a pas de résultat (donc 0 MP) d'afficher "MP indisponible".
0
rolly41 Messages postés 242 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 18 septembre 2023 1
17 mai 2013 à 23:30
Voici ma nouvelle requête qui fonctionne très bien :
$sql = 'SELECT COUNT(*) FROM messages_prive WHERE destinataire="'.$id.'" && etat="non lu" && destinataire_del="off"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($req);
if($data[0]=='0')
{
echo '(<font color="#00ff00">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}
elseif($data[0]!='0')
{
echo '(<font color="#ff0000">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}
else
{
echo '<font color="#ff0000">MP indisponible</font> | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}
0
Profil bloqué
18 mai 2013 à 09:41
Salut,

Je pense que ça

if($data[0])

n'est pas correct.

Fait un print_r($date); avant et dit moi ce qu'il t'affiche.

J'aurais plutôt fait comme ça :

if($data[0]==0)
0
MrYAU31 Messages postés 3808 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 8 juillet 2017 1 611
18 mai 2013 à 11:01
C'est ce qu'il a fait et c'est bon ;-)
0
Profil bloqué
18 mai 2013 à 11:11
^^ j'avais pas actualisé la page ^^
0