Compter le nombre de messages

jobouille Messages postés 286 Date d'inscription   Statut Membre Dernière intervention   -  
jobouille Messages postés 286 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous !

Sur mon site j'ai créer un système de message privé.

Voici le code qui affiche le ou les messages que l'on reçoit :

<?php
$allmsg = $bdd->query('SELECT * FROM mp ORDER BY id DESC LIMIT 0, 20');
while($msg = $allmsg->fetch())
    {
        if($msg['destinataire'] == $user['pseudo'])
            {
?>
<!--===========================-->
ICI S'AFFICHE LE OU LES MESSAGES
<!--===========================-->
<?php
            }
    }
 
?>


La variable $allmsg avec le while permet d'afficher TOUS les messages de la table message_prive.

Avec le if qui suit, j'affiche que les messages où le destinataire est égal au pseudo du compte.
Je doute que ce soit la meilleure façon mais ça fonctionne.

Le problème étant que : si la personne à un ou plusieurs messages, dans ce cas ces messages sont affichés. Mais si il n'a pas de messages j'aurais aimé qu'un texte s'affiche : Vous n'avez aucun nouveau message.

Je ne sais pas du tout comment m'y prendre. Peut être avec un compteur qui compte le nombre de ligne de la table message_prive où destinataire == pseudo.

J'espère avoir été clair.

Merci et bonne journée

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,


Voici le code corrigé et amélioré :

$user = !empty($user['pseudo'])?$user['pseudo']:NULL;

if($user){
 $sql = "SELECT * 
         FROM mp 
         WHERE destinataire = :user
         ORDER BY id DESC LIMIT 0, 20";

 $params = array(":user"=> $user);

  try{      
  
    $req = $bdd->prepare($sql);
    $req->execute($params);
    // On stocke le résultat de la requête dans un array
    $allmsg = $req->fetchAll();
    //Nombre de résultats retournés par la requête
    $nbResultats = count($allmsg);
  
  }catch(PDOException $e) {
    // En cas d'erreur dans la requête
    echo "<br><b>Erreur dans la requête: </b><br>".$e->getMessage();
  }


  if($nbResultats>0){
    //On boucle sur les messages pour es afficher
    foreach($allmsg as $Msg){
     //ICI S'AFFICHE LE OU LES MESSAGES
    }
  }else{
    echo "<br>Aucun message.";
  }
  
}else{
 //aucun USER
 echo "<br> Aucun USER dans la variable user['pseudo'] ";
}


Comme tu peux le voir.. je suis passé par une requête préparée (plus sûr ) pour ne prendre que les messages du user
et un fetchAll .. pour mettre le résultat dans un ARRAY plus simple à manipuler par la suite qu'un WHILE..


1
jobouille Messages postés 286 Date d'inscription   Statut Membre Dernière intervention   10
 
Génial ça fonctionne !

Merci beaucoup ! :)
0
jobouille Messages postés 286 Date d'inscription   Statut Membre Dernière intervention   10
 
Tant que je suis là j'en profite.
Sur une autre page je dois afficher toutes les offres (d'un marché).
J'ai essayé d'adapter la méthode que vous m'avez donné pour ceci mais ça n'a pas fonctionner.
Voici le code :

<?php
$alloffre = $bdd->query('SELECT * FROM marche_eleveur ORDER BY prix ASC');
while($offre = $alloffre->fetch())
{
	if(isset($_GET['produit'])) { $produitURL = htmlspecialchars($_GET['produit']);} 
	if($offre['produit'] == $produitURL AND $offre['quantite'] >= 1 AND $missionOffre == 1)
	{
?>
<!--==============-->
ICI TOUTES LES OFFRES
<!--==============-->
<?php
	}
}
?>


Les 2 if en dessous du while sont obligatoires pour mon code.

Le but étant d'afficher une fois de plus le message "aucune offre" s'il n'y a rien.

Encore merci :)
0