[Messagerie] function recup_conversation en pdo

Résolu
Zakarya93 Messages postés 1026 Statut Membre -  
Zakarya93 Messages postés 1026 Statut Membre -
Bonjour,

Sachant que le code de cette function mysl_ est :
<?php
//la function qui va recuperer les conversations
function recup_conversation()
{
    $results = array();
    $sql = mysql_query("
    SELECT conversations.id_conversation,
                    conversations.sujet_conversation,
                    utilisateurs.pseudo,
                    utilisateurs.avatar,
                    conversations_messages.date_message
                    FROM conversations
                    LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
                    INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
                    INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
                    WHERE pseudo_dest = '{$_SESSION['pseudo']}'
                    GROUP BY conversations.id_conversation
                    ORDER BY conversations_messages.date_message DESC
    ");
    while($row = mysql_fetch_assoc($sql))
    {
        $results[] = $row;
    }
        return $results;
}
?>


Qu'est ce que donne ce code en pdo svp ?
J'approche de la fin !

Merci d'avance :)

7 réponses

Résumé de la discussion

La discussion porte sur la conversion d'une fonction PHP qui récupère des conversations de MySQL vers PDO et sur l'utilisation d'un identifiant utilisateur comme paramètre dans la requête.
Parmi les éléments essentiels, une proposition de remplacement propose d'utiliser une requête préparée avec un marqueur de paramètre et de lier l'identifiant via PDO, plutôt que la variable de session.
Des points critiques apparaissent, notamment des erreurs de syntaxe dans les placeholders et l'oubli d'un SELECT initial, ainsi que l'adéquation entre quotes et paramètres dans la clause WHERE.
En complément, plusieurs répondants encouragent à tester le code avec les résultats affichés et à vérifier la présence de la session afin d'isoler les causes sans conclure à une réparation immédiate.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. hharchi9 Messages postés 693 Statut Membre 24
     
    Commence par faire un premier jet, on n'est pas là pour mâcher le travail. Essaye un peu au moins... D'autant que tu dispose d'un grand nombre d'exemples de conversion !
    0
  2. Zakarya93 Messages postés 1026 Statut Membre 10
     
    C'est un truc de ce genre ?

    <?php 
    //la function qui va recuperer les conversations
    function recup_conversation() {
     global $bdd; // déclaration globale de BDD
    
    $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
    $strWhere = $pseudo ? " WHERE pseudo !='$pseudo'  " : '' ;
    
    $sql = "conversations.id_conversation,
                        conversations.sujet_conversation,
                        utilisateurs.pseudo,
                        utilisateurs.avatar,
                        conversations_messages.date_message
                        FROM conversations
                        LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
                        INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
                        INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
                        WHERE pseudo_dest = '{$_SESSION['pseudo']}'
                        GROUP BY conversations.id_conversation
                        ORDER BY conversations_messages.date_message DESC";
    
     $req = $bdd->prepare($sql);
     $req->execute();  
     $resultat = $req->fetchall();
    return $resultat;
    }
    ?>
    0
    1. hharchi9 Messages postés 693 Statut Membre 24
       
      Passe le $_SESSIOn['pseudo'] dans un array !
      0
    2. Zakarya93 Messages postés 1026 Statut Membre 10 > hharchi9 Messages postés 693 Statut Membre
       
      $pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;

      comme ça ?
      0
    3. hharchi9 Messages postés 693 Statut Membre 24
       
      Un array $params pour la requete !
      0
    4. Zakarya93 Messages postés 1026 Statut Membre 10 > hharchi9 Messages postés 693 Statut Membre
       
      $params = array(':session_pseudo' =>$pseudo_session ');
      0
    5. hharchi9 Messages postés 693 Statut Membre 24
       
      Voilà et réutiliser le :session_pseudo dans la requête à la place de $_SESSION['pseudo'] (au niveau du where)
      0
  3. hharchi9 Messages postés 693 Statut Membre 24
     
    Tu as bien changé :pseudo_session ?
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      bien sur
      <?php 
      //la function qui va recuperer les conversations
      function recup_conversation() {
       global $bdd; // déclaration globale de BDD
      
      $pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
      
      $sql = "SELECT conversations.id_conversation,
                          conversations.sujet_conversation,
                          utilisateurs.pseudo,
                          utilisateurs.avatar,
                          conversations_messages.date_message
                          FROM conversations
                          LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
                          INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
                          INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
                          WHERE pseudo_dest = ':session_pseudo '
                          GROUP BY conversations.id_conversation
                          ORDER BY conversations_messages.date_message DESC";
      					
      					$params = array(':session_pseudo' =>$pseudo_session);
                          
      					
      $req = $bdd->prepare($sql);
      $req->execute($params);
      $resultat = $req->fetchall();
      
      return $resultat;
      }
      ?>
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      Je voulais dire dans phpmyadmin :)
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      pourquoi ? pour la requête j'ai fais :
      SELECT conversations.id_conversation,
                          conversations.sujet_conversation,
                          utilisateurs.pseudo,
                          utilisateurs.avatar,
                          conversations_messages.date_message
                          FROM conversations
                          LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
                          INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
                          INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
                          WHERE pseudo_dest = ':session_pseudo '
                          GROUP BY conversations.id_conversation
                          ORDER BY conversations_messages.date_message DESC
      0
    4. hharchi9 Messages postés 693 Statut Membre 24
       
      Donc tu n'as pas remplacé :session_pseudo dans le WHERE !! Met le pseudo du membre qui a un message !
      0
    5. Zakarya93 Messages postés 1026 Statut Membre 10
       
      j'ai : http://www.noelshack.com/2015-26-1435093749-erreur.jpg
      0
  4. hharchi9 Messages postés 693 Statut Membre 24
     
    Sans le code utilisé (celui que tu utilises pour l'affichage), impossible de voir ce qui cloche...
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      ah pardon
      <?php 
      include('functions/membre.func.php');
      include('body/header.php');
      include('body/menu.php');
      ?>
      <h3>Les conversations</h3>
      <?php 
      $conversations = recup_conversation();
         if($conversations == true)
         {
              foreach($conversations as $conversation)
           {
            ?>
               <div class='conversation'>      
              <a href="index.php?page=profile&pseudo=<?php echo $conversation['pseudo']; ?>"><?php echo $conversation['pseudo']; ?></a><br />
           <omg src='avatar/<?php echo $conversation['avatar']; ?> height='70' width='70'>
           <p><a href=""> <?php echo $conversation['sujet_conversation'] ?></a></p>
           
                        </div>      
            <?php
           }
         }else{
          ?>
             <div class'error'>Vous n'avez pas de message</div>
          <?php
         }
      ?>
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      coloration syntaxique...
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      dsl j'ai oublié la balise de fermeture :/
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Bonjour

     WHERE pseudo_dest = ':session_pseudo '


    Il ne faut pas d'apostrophes autour de :session_pseudo :
     WHERE pseudo_dest = :session_pseudo
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      ah merci beaucoup !
      j'ai mtn ceci : http://www.noelshack.com/2015-26-1435095592-erreur.jpg
      (je sais pas pourquoi ça s'est repeté plusieurs fois et il manque l'avatar)
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      Pourquoi en plusieurs fois => ça vient de ta bdd !
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      ah je vois, 3 messages ont été envoyés
      0
  7. Utilisateur anonyme
     
    Pour l'avatar, encore une histoire d'apostrophes.
    <omg src='
    et où est l'apostrophe qui ferme le src ?
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      comme ceci ?
      <omg src=""avatar/<?php echo $conversation['avatar']; ?> height='70' width='70'>
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Bonjour,

      1 - .. ce n'est pas OMG .. mais IMG qu'on doit utiliser.
      2 - Il faut écrire, comme le dit Le père, les attributs entre QUOTES !

      <IMG src='avatar/<?php echo $conversation['avatar']; ?>'  height='70' width='70'></IMG>
      
      0
    3. hharchi9 Messages postés 693 Statut Membre 24
       
      Pour ne plus avoir plusieurs champs d'affiché, check ta base de données et enlève les champs en double qui se sont formés à la réexécution du script !
      0
  8. Zakarya93 Messages postés 1026 Statut Membre 10
     
    parfait merci à tous :) petite question pourquoi dans ma bdd je ne peux supprimer les messages? :/
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Ben.. je ne sais pas ... tu fais comment pour essayer de les supprimer ??
      Tu as un message d'erreur ??
      .... si tu ne nous donnes pas plus d'infos ... et bien..... ( ...comment dire....???...) ..... on ne pourra pas DEVINER !!!!!
      0
      1. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        finalement je pense que ça se fera manuellement sur le site, ou je peux très bien utilise une requete avec un DELETE ^^
        0