Compter le nombre de messages

Fermé
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 - 16 août 2015 à 19:09
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 - 16 août 2015 à 20:30
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 août 2015 à 19:30
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 jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10
16 août 2015 à 20:05
Génial ça fonctionne !

Merci beaucoup ! :)
0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10
16 août 2015 à 20:30
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