Function recuperer_info_membre_choisi() en pdo

Résolu
Bonjour,

J'ai cette function que je voudrais convertir en pdo :
<?php
// la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
function recuperer_info_membre_choisi()
{
$results = array();
$pseudo = mysql_real_escape_string(htmlentities($_GET['pseud
o']));

$query = mysql_query("SELECT * FROM utilisateurs WHERE pseudo='$pseudo'");
while ($row = mysql_fetch_assoc($query))
{
$results[] = $row;
}

return $results;

} 


comme j'ai fais maintes erreurs à ce sujet, je pourrais solliciter votre aide ? je vous remercie d'avance: )

10 réponses

Résumé de la discussion

Conversion d'une fonction PHP qui récupère les informations d'un membre en PDO et difficultés rencontrées lors de la migration du code original vers une requête préparée. Plusieurs contributions évoquent des erreurs fréquentes comme l'utilisation de variables non définies, des arrays non initialisés, et des enjeux de sécurité, en proposant des ajustements avec PDO et fetch. Des réponses illustrent l'évolution du code, passant d'inclusions répétées à une fonction PDO, avec corrections sur les appels, la gestion des paramètres et le traitement des résultats via fetchAll. Une nuance utile porte sur les pratiques de sécurité et sur le moment où effectuer les conversions, afin d'éviter de mélanger transformations et requêtes.

Bobot (l’IA à votre service)
  1. Essaye ça :
    <?php
    // la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
    function recuperer_info_membre_choisi()
    {
    global $bdd; // déclaration globale de BDD
    $pseudo = htmlspecialchars(strip_tags($_GET['pseud
    o']));
    
    $query = $bdd->prepare("SELECT * FROM utilisateurs WHERE pseudo=:pseudo");
    $query->execute(array(':pseudo' =>$pseudo));
    $results=$query->fetchall();
    
    return $results;
    
    } 
    1. J'obtiens ça ; Parse error: syntax error, unexpected 'body' (T_STRING) in C:\wamp\www\rs\pages\profile.php on line 3

      profile.php :

      <?php
      include('functions/membre.func.php);
      include('body/header.php');
      include('body/menu.php');
      ?>
      <div class='info'>
      <?php
      $info_membres_choisi = recuperer_info_membre_choisi();
      
         foreach($infos_membres_choisis as $info_membre_choisi
         {
      	   ?>
      	               <img src="avatar/<?php echo $info_membre_choisi['avatar']; ?>"" height='200' width='200' alt='avatar'>
                         <p><strong>Email : </strong><em><?php echo $info_membre_choisi['email']; ?></em></p>
                         <p><strong>Sexe : </strong><em><?php echo $info_membre_choisi['sexe']; ?></em></p>
                         <p><strong>A propos de vous : </strong><em><?php echo $info_membre_choisi['apropos']; ?></em></p>
      	   <?php
         }
      ?>
      </div>
    2. ah merci ! j'ai mtn : Parse error: syntax error, unexpected '?> ' in C:\wamp\www\rs\pages\profile.php on line 12
    3. tu n'as pas fermé la parenthèse de ton foreach
    4. J'obtiens mtn :

      Notice: Undefined variable: infos_membres_choisis in C:\wamp\www\rs\pages\profile.php on line 10

      Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\profile.php on line 10
  2. Modérateur
    Commence par nous remontrer le code CORRIGE qu'on sache où tu en es !
    Penses également à nous mettre le code de ta fonction recuperer_info_membre_choisi()
    1. Bah c'est le même sauf que j'ai rajouté ma parenthèse :
      <?php
      include('functions/membre.func.php');
      include('body/header.php');
      include('body/menu.php');
      ?>
      <div class='info'>
      <?php
      $info_membres_choisi = recuperer_info_membre_choisi();
      
         foreach($infos_membres_choisis as $info_membre_choisi
         {
          ?>
                      <img src="avatar/<?php echo $info_membre_choisi['avatar']; ?>"" height='200' width='200' alt='avatar'>
                         <p><strong>Email : </strong><em><?php echo $info_membre_choisi['email']; ?></em></p>
                         <p><strong>Sexe : </strong><em><?php echo $info_membre_choisi['sexe']; ?></em></p>
                         <p><strong>A propos de vous : </strong><em><?php echo $info_membre_choisi['apropos']; ?></em></p>
          <?php
         }
      ?>
      </div>


      profile.func.php :

      <?php
      // la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
      function recuperer_info_membre_choisi()
      {
      global $bdd; // déclaration globale de BDD
      $pseudo = htmlspecialchars(strip_tags($_GET['pseudo']));
      
      $query = $bdd->prepare("SELECT * FROM utilisateurs WHERE pseudo=:pseudo");
      $query->execute(array(':pseudo' =>$pseudo));
      $results=$query->fetchall();
      
      return $results;
      
      }
    2. Modérateur
      ... c'est le même ...????
      Et la correction de la ligne 2 ?????????
    3. Modérateur
      @jordane45Ne vois tu pas, quand tu postes ton message dans le forum... que les couleurs de tes différentes lignes peuvent sembler "bizarre" aux lignes 3 4 ... ????
      Penses bien qu'une chaine de caractères .. commence ET SE TERMINE par des quotes ! (simples ou doubles..peu importe... du moment que c'est le mêmes qui ouvrent et qui ferment !)
    4. ah mince j'ai juste fait un c/c de ce topic, je l'avais déjà faite la modif ligne 2 sur mon notepad++ pardon
    5. Modérateur
      @Zakarya93
      Ah mince j'ai juste fait un c/c de ce topic, je l'avais déjà faite la modif ligne 2 sur mon notepad++ pardon

      C'est bien pour ça .. qu'a chaque fois que je te demande le code ... je veux celui QUI EST SUR TON PC ... et pas celui du topic ! .. ce n'est pas la première fois que je te le dis.....
      Merci de faire attention.
  3. Modérateur
    Que vient faire l'include
    include('functions/membre.func.php'); 
     

    dans ce code ?
    Alors que tu utilises la page profile.func.php ...
    l'erreur ne serait-elle pas là ?
    Et pourquoi est-ce un INCLUDE au lieu d'un REQUIRE_ONCE (comme pour tes autres pages... voir mes remarques précédentes .... dans tes précédentes questions.....)
    1. J'ai rien dit, ce sujet traite de liste_membre.php...
      sinon j'ai commenté cette ligne de code et aussi testé le require once rien n'a fonctionné
    2. Modérateur
      tu as essayé d'inclure ta page profile.func.php à la place de membre.func.php ??
    3. @jordane45Oui j'obtiens : Fatal error: Cannot redeclare recuperer_info_membre_choisi() (previously declared in C:\wamp\www\rs\functions\profile.func.php:3) in C:\wamp\www\rs\functions\profile.func.php on line 14

      et avec le require_once j'ai les 2 memes erreurs
  4. Modérateur
    et avec le require_once j'ai les 2 memes erreurs

    Normale ... car VU qu'il est déjà déclaré dans ton INDEX.PHP ... il ne le remet pas ... contrairement à l'include (ou au require) simple (c'est à dire ...sans le ONCE )....

    Pour ce qui est des messages d'erreurs... et pour calmer mes doutes... pourrais tu (encore) ... nous mettre le code de tes deux pages ?

    PS: Si tu pouvais utiliser le BOUTON : REPONDRE .. au lieu de mettre tes messages en commentaires... cela rendrait le suivi de la discussion plus simple. Merci.
    1. Profile.php

      <?php
      require('functions/profile.func.php');
      include('body/header.php');
      include('body/menu.php');
      ?>
      <div class='info'>
      <?php
      $info_membres_choisi = recuperer_info_membre_choisi();
      
         foreach($infos_membres_choisis as $info_membre_choisi)
         {
      	   ?>
      	               <img src="avatar/<?php echo $info_membre_choisi['avatar']; ?>"" height='200' width='200' alt='avatar'>
                         <p><strong>Email : </strong><em><?php echo $info_membre_choisi['email']; ?></em></p>
                         <p><strong>Sexe : </strong><em><?php echo $info_membre_choisi['sexe']; ?></em></p>
                         <p><strong>A propos de vous : </strong><em><?php echo $info_membre_choisi['apropos']; ?></em></p>
      	   <?php
         }
      ?>
      </div>


      Profile.func.php :

      <?php
      // la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
      function recuperer_info_membre_choisi()
      {
      global $bdd; // déclaration globale de BDD
      $pseudo = htmlspecialchars(strip_tags($_GET['pseudo']));
      
      $query = $bdd->prepare("SELECT * FROM utilisateurs WHERE pseudo=:pseudo");
      $query->execute(array(':pseudo' =>$pseudo));
      $results=$query->fetchall();
      
      return $results;
      
      }
      1. Contributeur
        P.S.: bien que ce que tu fais ne soit pas incorrect, par convention on stocke les infos non transformées dans la BDD, et on les convertit (ici
        htmlspecialchars(strip_tags
        ) uniquement dès la sortie. Autrement dit cette conversion n'a pas sa place dans les requêtes, mais uniquement lors de l'affichage du pseudo sur la page.
      2. @ElementWdu coup ça donne ? :
        ?php
        // la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
        function recuperer_info_membre_choisi()
        {
        global $bdd; // déclaration globale de BDD
        $pseudo = ($_GET['pseudo']));
        
        $query = $bdd->prepare("SELECT * FROM utilisateurs WHERE pseudo=:pseudo");
        $query->execute(array(':pseudo' =>$pseudo));
        $results=$query->fetchall();
        
        return $results;
        
        }
    2. Modérateur
      Bon... je recommence ...
      La ligne 2 est INUTILE .....
      Si tu essaies de comprendre un minimum ce que tu codes ... tu vas comprendre que tu fais DEJA un include de tes fonctions dans ton INDEX.PHP.
      ( Lorsque tu affiches une page toto .... tu fais EN MEME TEMPS un include de toto.func.php ) !

      Bon.. ensuite :
      Evite de récupérer les variables GET DANS tes fonctions... traite les AVANT .. et passe les en PARAMETRES DE TA FONCTION.

      de plus (comme déjà dit...) ... Pour toutes tes variables de type POST / GET / SESSION / COOKIE ...... vérifie AVANT de les utiliser... qu'elles existent. Cela se fait via la fonction ISSET.

      Essayes ça :
      Profile.php
      <?php
      //-----------------------------
       //Profile.php 
      //-----------------------------
      
      include_once('body/header.php');
      include_once('body/menu.php');
      ?>
      <div class='info'>
      <?php
      $pseudo = isset($GET|'pseudo'])?$GET|'pseudo']:NULL;
      $info_membres_choisi = recuperer_info_membre_choisi(pseudo);
      
      foreach($infos_membres_choisis as $info_membre_choisi) {
       echo"<img src='avatar/". $info_membre_choisi['avatar']."' height='200' width='200' alt='avatar'>";
           echo "<p><strong>Email : </strong><em>".$info_membre_choisi['email']."</em></p>";
           echo "<p><strong>Sexe : </strong><em>".$info_membre_choisi['sexe']."</em></p>;"
           echo "<p><strong>A propos de vous : </strong><em>".$info_membre_choisi['apropos']."</em></p>";
      }
      ?>
      </div>
      
      

      (tu noteras qu'encore une fois.. je t'ai tout remis en PHP (pour éviter d'ouvrir/fermer des balises PHP partout dans ton code ! )

      //Profile.func.php
      <?php
      //-----------------------------
      //Profile.func.php 
      //-----------------------------
      // la fonction qui va recuperer les informations de la personne choisi par l'utilisateur
      function recuperer_info_membre_choisi($pseudo = NULL) {
      global $bdd; // déclaration globale de BDD
      
      $result = array();
      if($pseudo){
        $sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo" ;
        $query = $bdd->prepare($sql);
        $query->execute(array(':pseudo' =>$pseudo));
        $result=$query->fetchall();
      }
      return $result;
      
      }
      
      


      edit : ajout d'un IF dans le fichier profil.func.php

      Cordialement,
      Jordane
      1. Merci pour ces explications ! j'ai donc ceci : Parse error: syntax error, unexpected ']' in C:\wamp\www\rs\pages\profile.php on line 11
      2. Modérateur
        @Zakarya93Oui.. erreur de touche de clavier...
        A ton avis .. qu'est-ce qui n'est pas bon dans cette ligne de code :
        $pseudo = isset($GET|'pseudo'])?$GET|'pseudo']:NULL;
        


        Essaye de trouver AVANT de lire ce qui est en dessous...
        Spoiler
        ..... Je me suis trompé et aie mis un PIPE | ... au lieu d'un crochet [
      3. Modérateur
        @jordane45Ce qui donne :
        Spoiler
        $pseudo = isset($GET['pseudo'])?$GET['pseudo']:NULL;
        

      4. Merci ! mtn j'ai Parse error: syntax error, unexpected ']' in C:\wamp\www\rs\pages\profile.php on line 11
      5. 2 barres en fait c pour ça !
    3. J'ai mtn cette erreur : Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in C:\wamp\www\rs\pages\profile.php on line 18
      1. Modérateur
        Regarde ligne 17.. j'ai fait une erreur en fin de ligne
      2. @jordane45C corrigé ! j'ai mtn 3 erreurs :'(

        Notice: Use of undefined constant pseudo - assumed 'pseudo' in C:\wamp\www\rs\pages\profile.php on line 12

        Notice: Undefined variable: infos_membres_choisis in C:\wamp\www\rs\pages\profile.php on line 14
        Call Stack

        Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\profile.php on line 14
        Call Stack
    4. Modérateur
      Je fais beaucoup d'erreur ce soir .... faut que j'aille dormir... ^^

      Si tu regardes bien à la ligne 12 .. tu vas voir que j'ai oublié un $ ....
      Spoiler
      $pseudo = isset($GET|'pseudo'])?$GET|'pseudo']:NULL;
      $info_membres_choisi = recuperer_info_membre_choisi($pseudo);
      


      1. Modérateur
        Ensuite .... Ligne 14 ... ... le nom de la variable ne correspond pas à celle de la ligne 12 ... (infos ..et info sans S )
        change la ligne 12 comme ceci :
        $pseudo = isset($GET|'pseudo'])?$GET|'pseudo']:NULL;
        $infos_membres_choisis = recuperer_info_membre_choisi($pseudo);
        
      2. Oh je ne voudrais surtout pas vous en priver ^^
        j'ai mtn : Notice: Undefined variable: infos_membres_choisis in C:\wamp\www\rs\pages\profile.php on line 14

        Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\profile.php on line 14
    5. Modérateur
      Tu peux me reposter le code corrigé de ta page //Profile.php ?
      1. <?php
        //-----------------------------
         //Profile.php 
        //-----------------------------
        
        include_once('body/header.php');
        include_once('body/menu.php');
        ?>
        <div class='info'>
        <?php
        $pseudo = isset($GET['pseudo'])?$GET['pseudo']:NULL;
        $info_membres_choisis = recuperer_info_membre_choisi($pseudo);
        
        foreach($infos_membres_choisis as $info_membre_choisi) {
         echo"<img src='avatar/". $info_membre_choisi['avatar']."' height='200' width='200' alt='avatar'>";
             echo "<p><strong>Email : </strong><em>".$info_membre_choisi['email']."</em></p>";
             echo "<p><strong>Sexe : </strong><em>".$info_membre_choisi['sexe']."</em></p>";
             echo "<p><strong>A propos de vous : </strong><em>".$info_membre_choisi['apropos']."</em></p>";
        }
        ?>
        </div>
    6. Modérateur
      <?php
      //-----------------------------
       //Profile.php 
      //-----------------------------
      
      include_once('body/header.php');
      include_once('body/menu.php');
      ?>
      <div class='info'>
      <?php
      if(!function_exists('recuperer_info_membre_choisi')){
       echo "ERREUR : La fonction recuperer_info_membre_choisi n'existe pas ! ";
      }
      $pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
      $infos_membres_choisis = recuperer_info_membre_choisi($pseudo);
      
      foreach($infos_membres_choisis as $info_membre_choisi) {
       echo"<img src='avatar/". $info_membre_choisi['avatar']."' height='200' width='200' alt='avatar'>";
           echo "<p><strong>Email : </strong><em>".$info_membre_choisi['email']."</em></p>";
           echo "<p><strong>Sexe : </strong><em>".$info_membre_choisi['sexe']."</em></p>";
           echo "<p><strong>A propos de vous : </strong><em>".$info_membre_choisi['apropos']."</em></p>";
      }
      ?>
      </div>
      
      

      1. Merci infiniement et bon repos ! :)