Page 1 sur 1

Récupérer le nom une seule fois et tous ses messages

Posté : 18 juin 2021, 15:49
par keunene
Bonjour,
j'ai plusieurs lignes dans la table utilisateurs.

le même utiilisateur peut dans cette table avoir dix messages.
je voudrais afficher le nom de l'utilisateur une seule fois et ses dix messages.Cependant mon code
affiche autant de fois le nom de de l'utilisateur qu'il y a de messages.Ce que je voudrais éviter. Merci d'avance!

Code : Tout sélectionner

<?php $sql = "SELECT * FROM utilisateurs"; try{ $stmt = $bdd->query($sql); if($stmt === false){ die("Erreur"); } }catch (PDOException $e){ echo $e->getMessage(); } ?> <!DOCTYPE html> <html> <head>Afficher la table users</head> <body> <h1>Liste des utilisateurs</h1> <table> <thead> <tr> <th>NOM</th> <th>MESSAGE</th> </tr> </thead> <tbody> <?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)) : ?> <tr> <td><?php echo htmlspecialchars($row['nom']); ?></td> <td><?php echo htmlspecialchars($row['message']); ?></td> </tr> <?php endwhile; ?> </tbody> </table> </body> </html>

Re: Récupérer le nom une seule fois et tous ses messages

Posté : 18 juin 2021, 15:57
par Shadowwera
Bonjour,

C'est normal qu'il affiche le nom d'utilisateur a chaque fois car tu a mis celui-ci dans ta boucle. C'est le problème lorsqu'on fetch les données dans un while, c'est que ça laisse pas toujours pas possibilité de faire exactement ce que l'on veux ..

Dans ton cas, je te conseil de récupérer toutes tes valeurs dans un tableau ( en remplaçant ton fetch par un fetchAll ) en dehors du while, puis de passer par un bouche foreach
foreach($datas as $data) {
  echo $data['nom'];
  foreach($data['message'] as $message) {
    echo $message;
  }
}
PS : Cela inclus de récupérer et stocker tous les messages dans un tableau, contenu dans le tableau de l'utilisateur
Tu va certainement devoir modifier tout ça en fonction de ton code/base de données

Re: Récupérer le nom une seule fois et tous ses messages

Posté : 18 juin 2021, 15:57
par or 1
il semble y avoir un problème de conception des tables. il faut 2 tables dans un tel cas, une pour les users, une pour leurs messages.

pour ne pas réafficher le nom, il faut trier la requete par utilisateur. puis quelque chose du genre :
$nom = "";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if($nom != $row['nom']){
$nom = $row['nom'];
echo $nom;
}
// echo message
}

Re: Récupérer le nom une seule fois et tous ses messages

Posté : 18 juin 2021, 16:48
par keunene
Merci infiniment, j'ai essayé la deuxième méthode et il fonctionne à merveille.Je vais maiintenant essayer la 1ère et ainsi j'aurai deux cordes dans mon sac