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

Résolu
rolly41 Messages postés 244 Date d'inscription   Statut Membre Dernière intervention   -  
 Profil bloqué -
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 ?
A voir également:

2 réponses

MrYAU31 Messages postés 3808 Date d'inscription   Statut Membre Dernière intervention   1 615
 
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
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   1 615
 
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 244 Date d'inscription   Statut Membre Dernière intervention   1
 
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 12715 Date d'inscription   Statut Contributeur Dernière intervention   277
 
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 244 Date d'inscription   Statut Membre Dernière intervention   1
 
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é
 
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   Statut Membre Dernière intervention   1 615
 
C'est ce qu'il a fait et c'est bon ;-)
0
Profil bloqué
 
^^ j'avais pas actualisé la page ^^
0