Systeme de messagerie priver

Résolu
salut tous le monde j'essaye de coder un système de messagerie priver là suis confronter un un problème j'aimerai savoir comment classer les messages de l'expéditeur a droite et ceux du destinataire a gauche
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8", "root", "");


error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
?>
<?php
$iesp ="5 " ;
$dest ="10" ;
 ?>

 <?php $requete = $bdd->query("SELECT * FROM membres where id = $dest  ");

  while($normal =$requete->fetch())

{ ?>
  
 <?php echo $normal ['pseudo'] 


 ?> <br>
<img src="<?php echo $normal ['avatar']?>" weight = "100" height ="100">
<?php }  ?> 


<?php $requete = $bdd->query("SELECT * FROM messages where id_expediteur = $iesp and id_destinataire = $dest  or id_destinataire = $iesp and id_expediteur = $dest " );

  while($resultat =$requete->fetch())

{?>
  

    <table>
  <tr>
 <ul> 
 <?php
    
  ?>
  <?php echo $resultat ['id_expediteur']?>
  <?php echo $resultat ['message']?></br>
  <?php echo $resultat ['date']?></br>
 
  </ul>
   
  

  
   
 </tr>
 
<?php }?> 


  

6 réponses

Résumé de la discussion

Problème central : un développeur cherche à afficher des échanges privés en alignant l'émetteur à droite et le récepteur à gauche, via PHP et MySQL, et aborder le tri par auteur et la présentation visuelle. Parmi les solutions, l'utilisation d'un IF/ELSE dans la boucle de récupération pour distinguer l'émetteur et le récepteur, l'ORDER BY date DESC et l'ajout de classes CSS pour l'alignement. D'autres réponses suggèrent de placer le tri côté HTML/CSS et d'éviter les problèmes de syntaxe, tout en recommandant de corriger les fautes SQL et d'utiliser ORDER BY dans la requête. En cas d'évolution, la discussion rappelle aussi de mieux organiser le code et de clarifier le besoin, afin de ne pas confondre l'affichage et l'écriture de requêtes.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    Ta question concerne une requête SQL ???
    0
    1. Non c’est mysql
      0
    2. Modérateur
      @ir_1997MySQL c'est le moteur...
      Le langage c'est le sql..
      Donc quel est le souci exactement ?
      Qu'obtiens tu ?
      0
    3. Contributeur
      @jordane45bonjour, le soucis est-il d'afficher les messages en deux colonnes ?
      0
    4. @jordane45J’ai fais une requête select from
      Des messages
      Maina j’aimerais
      Afficher
      Les messages
      De l’expéditeur droit et ceux du destinataire à gauche en fonction du date time comme pour messager ou WhatsApp

      après le fetch

      La j’obtiens les messages de l’expéditeur et du destinataire
      Mais pas classer de droit à gauche
      0
    5. @yg_beVoilà comme pour messanger ou WhatsApp
      0
  2. bonjour la voila bdd et ce sa affiche sur la page





    J’aimerais les afficher ainsi
    Mais j’arrive pas parce le système ne fait pas la différence entre les messages de l’expéditeur et ceux du destinataire

    0
    1. Modérateur
      Tu n'as pas bien lu ce que je t'ai marqué ou alors tu n'as pas compris....

      Je t'ai demandé de tester ta requête dans ta bdd ( via phpmyadmin )
      Pour être plus précis.. tu prends la requête, tu vas dans phpmyadmin tu ouvres l'onglet SQL, tu y colles la requêtes et tu cliques sur le bouton exécuter.
      Là, tu nous en fais une cpature écran...

      Bien entendu, tu nous postes également le code de cette requête sur le forum que l'on voit laquelle tu as utilisé
      Tu auras, bien entendu, pris en compte mes remarques précédentes et tu y aura ajouté un ORDER BY sur la date...
      0
    2. @jordane45La je crois
      Que je me trompe c’est pas un problème mysql
      Mais Plus-tot php while loop
      Je m’excuse

      C’est pour sa on arrive pas a se comprendre
      0
    3. Modérateur
      @ir_1997Si si, on se comprend bien....
      Ton premier souci, c'est d'avoir la bonne requête SQL
      De là, il sera plus facile de "trouver" le code php adapté.

      Donc.. j'attend que tu répondes à mes questions précédentes....
      A partir de là, on verra pour t'aiguiller sur le code php à écrire.
      0
    4. Modérateur
      @jordane45Pense à nous faire le ORDER BY en fonction de tes besoins.
      Actuellement, le message le plus récent apparait en haut... c'est ce que tu veux ?

      Et dans ton code PHP .. qu'as tu essayé ?
      Car... il te suffit d'un IF/ELSE sur l'id de l'expéditeur pour savoir de qui vient le message ....
      Et via ce if, utiliser, par exemple, une classe CSS pour placer le texte à gauche ou à droite ...

      Quoi qu'il en soit,
      SI tu n'as pas de souci avec la requête... ta question n'a rien à faire dans le forum Bases de données !
      Si ta question concerne l'écriture d'un simple IF/ELSE en PHP... il aurait fallut placer ta question dans le forum PHP et, au passage, te former aux fondamentaux du langage... ( le IF c'est quand même l'une des premières instruction qu'on apprend en programmation ! )

      Et enfin,; si ta question concerne le fait d'écrire du html/css pour placer ton texte à gauche ou à droite... là .. c'est dans le forum CSS qu'il aurait fallu poster ton message...

      Ce n'est pas la première fois que tu postes dans un forum sans réel lien avec ton problème. Il serait temps que tu fasses des efforts.. histoire qu'on reste motivé à te venir en aide.
      0
  3. voila ce que sa m'affiche

    Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\xampp\htdocs\automobile.php on line 56

    <?php
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8", "root", "");
    
    
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    ?>
    <?php
    $iesp ="5 " ;
    $dest ="10" ;
     ?>
    
     <?php $requete = $bdd->query("SELECT * FROM membres where id = $dest  ");
    
      while($normal =$requete->fetch())
    
    { ?>
      
     <?php echo $normal ['pseudo'] 
    
    
     ?> <br>
    <img src="<?php echo $normal ['avatar']?>" weight = "100" height ="100">
    <?php }  ?> 
    
    
    <?php $requete = $bdd->query("SELECT * FROM messages where id_expediteur = $iesp and id_destinataire = $dest  or id_destinataire = $iesp and id_expediteur = $dest order by date DESC " );
    
      while($resultat =$requete->fetch())
       
    
       if ($resultat = $iesp) 
    
         
       
      
    
    {?>
      
    
        <table>
      <tr>
     <ul> 
     <?php
       {  
      ?>
    
      <div align="center">
        
      <div align="right"></div>
     <?php echo $resultat ['id_expediteur']?>
      <?php echo $resultat ['message']?></br>
      <?php echo $resultat ['date']?></br> 
    
      <?php } else { ?>
        <div align="left">
    
        <?php echo $resultat ['id_expediteur']?>
      <?php echo $resultat ['message']?></br>
      <?php echo $resultat ['date']?></br>
    </div>
    </div>
    
     <?php } ?>
     
      </ul>
       
      
    
      
       
     </tr>
     
    <?php }?> 
    
    
    
    0
    1. Modérateur
      Bon.. histoire de gagner du temps...
      voici à quoi devrait ressembler ton code
      <?php
      // Affichage des erreurs php ( à placer AU DEBUT de ton code.. AVANT tout le reste ! )
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      // connexion de la bdd ET activation des erreurs PDO
      try{
        $bdd = new PDO("mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8", "root", "");
        // Activation des erreurs PDO
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
        $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
      } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
      }
      
      // initialisation des variables
      $iesp ="5 " ;
      $dest ="10" ;
      
      
      // requête pour récupérer les infos du membre 
      $sql = "SELECT * FROM membres where id = :dest";
      $datas = array(':dest'=>$dest);
      
      //Execution de la requete
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas) ;
        $normal = $requete->fetch(); // tu n'attends qu'un seul résultat.. donc pas besoin de boucle
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
      
      //requête pour récupérer les messages
      $sql = "SELECT * 
      FROM messages 
      WHERE (id_expediteur = :iesp and id_destinataire = :dest)
        or (id_destinataire = :iesp and id_expediteur = :dest)
        order by date DESC ";
      $datas = array(':dest'=>$dest, ':iesp'=>$iesp);
      
      //Execution de la requete
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas) ;
        $messages = $requete->fetchAll(); // On stocke le résultat dans un array
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
      
      
      echo $normal ['pseudo'] ;
      echo "<img src='".$normal['avatar']."' height='100' width='100'/>";
      echo "<br>";
      
      
      if(!empty($messages)){
        echo "<ul>";
        foreach($messages as $M){
         
          $idExp = $M['id_expediteur'];
          $message = htmlspecialchars($M['message']);
          $date = $M['date'];
          if ($idExp == $iesp ) {
            $class = "classpouraligneragauche";
          }else{
            $class = "classpouraligneradroite";
          }
          
          echo "<li class='".$class."' data-id='".$idExp."'>
                 <span class='date'>".$date."</span>
                 <span class='message'>".$message."</span>
                </li>";
         
        }
        echo "</ul>";  
      }
         
      ?>
        
      

      Ta question étant posée dans le forum Bases de données... la requête s'y trouve
      Tu nous as ensuite demandé pour le code PHP.. désormais c'est chose faite.
      Maintenant il te reste le CSS à faire.. mais là.. tu devras chercher par toi même ou ouvrir une nouvelle discussion dans le bon forum pour ça.

      0
      1. daccord mais sinon ils sont toujours pas aligner gauche a droite

        0
        1. Modérateur
          Tu sais lire ???
          Alors relis ce que j'ai marqué dans mon précédent message !!!!!
          0
      2. d'accord c'est saisie merci beaucoup
        0