Problèmes de connexion sur mon site (member.func.php)

Résolu
Bonjour,

Je me suis attaqué à l'interface de mon site, pour cela j'ai commencé à créer membre.php et membre.func.php or j'ai rencontré 2 erreurs :

Notice: Undefined variable: bdd in C:\wamp\www\rs\functions\membre.func.php on line 8

et

Fatal error: Call to a member function query() on a non-object in C:\wamp\www\rs\functions\membre.func.php on line 8

Membre.func.php :
<?php

//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
$infos=array();
$pseudo = $_SESSION['pseudo'];
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");


while ($data = $res->rowCount())
{
 $infos [] = $data;

}
	return $infos;
}


membre.php :

<div class='header'>
<?php
$infos = infos_membre_connecte();

foreach($infos as $info)
{	
   echo "Bienvenue ".$info['pseudo'];	
}
?>
</div>


Merci d'avance svp !!!!

11 réponses

Résumé de la discussion

Problème identifié : des notices et des erreurs fatales surviennent lorsque la fonction infos_membre_connecte() tente d'exécuter $db->query sans que $db soit défini, empêchant la récupération des informations de l'utilisateur connecté. Des solutions essentielles consistent à inclure correctement le fichier de connexion (functions/connect.php) et à s'assurer que la variable $db est initialisée et accessible dans infos_membre_connecte, afin que la requête puisse être exécutée. En outre, des corrections de syntaxe et d'inclusion apparaissent, notamment le bon placement des balises PHP et la correction de chemins et de points-virgules, pour éviter des erreurs de chargement et d'interprétation.

Bobot (l’IA à votre service)
  1. Modérateur
    Tu as oublié l'include de ton fichier de connexion à la bdd
    0
    1. Cela va résoudre les 2 erreurs?
      0
    2. ça ne marche pas
      0
  2. Modérateur
    Montres ton code modifié.
    0
    1. <?php
      include(functions/connect.php)
      //la function qui va recuperer les infos de l'utilisateur connecté
      function infos_membre_connecte()
      {
      $infos=array();
      $pseudo = $_SESSION['pseudo'];
      $res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
      
      
      while ($data = $res->rowCount())
      {
       $infos [] = $data;
      
      }
      	return $infos;
      }
      0
    2. Pardon :

      <div class='header'>
      <?php
      include(functions/membre.func.php)
      $infos = infos_membre_connecte();
      
      foreach($infos as $info)
      {	
         echo "Bienvenue ".$info['pseudo'];	
      }
      ?>
      </div>


      maintenant j'ai ; Parse error: syntax error, unexpected '$infos' (T_VARIABLE) in C:\wamp\www\rs\pages\membre.php on line 4
      Call Stack
      0
    3. Modérateur
      Dans un include. ..il faut des QUOTES
      0
    4. Tapé trop vite :/
      include('functions/membre.func.php');


      ce qui donne : Fatal error: Cannot redeclare infos_membre_connecte() (previously declared in C:\wamp\www\rs\functions\membre.func.php:3) in C:\wamp\www\rs\functions\membre.func.php on line 16

      register.func.php :
      <?php
      //la function qui va recuperer les infos de l'utilisateur connecté
      function infos_membre_connecte()
      {
      $infos=array();
      $pseudo = $_SESSION['pseudo'];
      $res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
      
      
      while ($data = $res->rowCount())
      {
       $infos [] = $data;
      
      }
      	return $infos;
      }


      que faire ?
      0
  3. Modérateur


    ce qui donne : Fatal error: Cannot redeclare infos_membre_connecte() (previously declared in C:\wamp\www\rs\functions\membre.func.php:3) in C:\wamp\www\rs\functions\membre.func.php on line 16

    Dans ta page principape (index.php je crois me souvenir) .. tu as déjà une fonction qui fait AUTOMATIQUEMENT l'include des fichiers qui se trouvent dans le répertoire functions...
    (du moins.. le fichier FUNC correspondant à la page que tu affiches )

    Donc .. IL NE FAUT PAS EN REFAIRE UN INCLUDE !!!

    Ensuite... je ne t'ai jamais demandé de le faire ... moi je je t'ai seulement dis : Il manque ton fichier de connexion à ta BDD !

    ce qui était presque bon dans le code donné dans ta première réponse
    Le mieux étant de remplacer, pour les fichiers OBLIGATOIRES (comme celui pour se connecter à la BDD), d'utiliser REQUIRE à la place de INCLUDE ... et encore mieux .. REQUIRE_ONCE .. qui n'en fera l'include QUE si il n'est pas déjà fait ailleurs dans ton code...

    (sans oublier les QUOTES autour du fichier à inclure bien entendu)

    Ce qui donne :
    <?php
    // FICHIER membre.func.php
    
    // Connexion à la BDD
    require_once('functions/connect.php');
    
    /**
    * function qui va recuperer les infos de l'utilisateur connecté
    */
    function infos_membre_connecte(){
     $infos=array();
     $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
    if($pseudo){
     $res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
    
     while ($data = $res->rowCount()){
      $infos [] = $data;
     }
    }else{
     $infos[] = "Erreur : Variable de Session Utilisateur introuvable";
    }
    return $infos;
    }
    


    Cordialement,
    Jordane
    0
    1. Je ne sais comment vous remercier! merci d'être autant actif !

      Les modifications maintenant appliqués, je reçois : Parse error: syntax error, unexpected 'function' (T_FUNCTION) in C:\wamp\www\rs\functions\membre.func.php on line 10
      0
    2. Cela donnerai quoi ? comment régler l'erreur à propos de function ? (com du dessus)
      0
    3. Je m'excuse de vous demander de me macher le travail , je me sens pas capable de coder cela et j'aimerai attaquer l'interface au plus vite ^^
      0
  4. Modérateur

    Cela donnerai quoi ? comment régler l'erreur à propos de function ? (com du dessus)

    Je t'ai donné la réponse !

    La seule chose à faire est : NE PAS REMETTRE (dans ton fichier membre.php) L'INCLUDE DE TON FICHIER functions/membre.func.php
    0
    1. Oui mais j'ai quand même cette erreur : Parse error: syntax error, unexpected 'function' (T_FUNCTION) in C:\wamp\www\rs\functions\membre.func.php on line 10
      0
    2. Modérateur
      @Zakarya93Tu nous montres le code actuel de ton fichier membre.func.php
      0
    3. c'est celui que vous m'avez donné
      0
    4. Membre.php
      <div class='header'>
      <?php
      $infos = infos_membre_connecte();
      
      foreach($infos as $info)
      {	
         echo "Bienvenue ".$info['pseudo'];	
      }
      ?>
      </div>


      membre.func.php :

      <?php
      // FICHIER membre.func.php
      
      // Connexion à la BDD
      require_once('functions/connect.php')
      
      /**
      * function qui va recuperer les infos de l'utilisateur connecté
      */
      function infos_membre_connecte(){
       $infos=array();
       $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
      if($pseudo){
       $res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
      
       while ($data = $res->rowCount()){
        $infos [] = $data;
       }
      }else{
       $infos[] = "Erreur : Variable de Session Utilisateur introuvable";
      }
      return $infos;
      }
      0
    5. J'ai oublié les quotes oui, et ça me donne : Notice: Undefined variable: db in C:\wamp\www\rs\functions\membre.func.php on line 14

      et

      Fatal error: Call to a member function query() on a non-object in C:\wamp\www\rs\functions\membre.func.php on line 14
      0
  5. Modérateur
    Le fichier de connexion .... tu as une variable $bdd .....

    et dans ta page membre.func.php ..... tu mets $db ????

    L'erreur est là !
    0
    1. toujours ce Notice: Undefined variable: bdd in C:\wamp\www\rs\functions\membre.func.php on line 19 et Fatal error: Call to undefined function query() in C:\wamp\www\rs\functions\membre.func.php on line 19

      le code que j'ai modifié : (member.func.php)
      <?php
      
      /// Connexion à la BDD
      $connectPhp =  __DIR__ . '/functions/connect.php';
      if(file_exists($connectPhp)){
        require_once($connectPhp);
      }else{
        echo "<br> Erreur : Le fichier $connectPhp  n'existe pas";
      }
      
      
      /**
      * function qui va recuperer les infos de l'utilisateur connecté
      */
      function infos_membre_connecte(){
       $infos=array();
       $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
      if($pseudo){
       $res = $bdd-->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
      
       while ($data = $res->rowCount()){
        $infos [] = $data;
       }
      }else{
       $infos[] = "Erreur : Variable de Session Utilisateur introuvable";
      }
      return $infos;
      }
      
      0
    2. c'est le votre ce script, ou dois-je ressortir l'ancien ? (le mien)
      0
    3. Bonsoir,

      Lors de l'appel de la requête, il y a un tiret en trop :
      $res = $bdd-->query(...
      0
    4. même soucis mais merci de me l'avoir signalé ^^
      0
    5. J'ai essayé celui-ci j'ai les 2 memes erreurs ... :

      <?php
      
      //la function qui va recuperer les infos de l'utilisateur connecté
      function infos_membre_connecte()
      {
      $infos=array();
      $pseudo = $_SESSION['pseudo'];
      $res = $bdd->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
      
      
      while ($data = $res->rowCount())
      {
       $infos [] = $data;
      
      }
      	return $infos;
      }
      0
  6. Modérateur

    le code que j'ai modifié : (register.func.php)

    REGISTER ???????
    On travaille sur le fichier MEMBRE depuis tout à l'heure .... !
    Pourquoi es-tu allé dans ce fichier ???????

    Bon... reprenons

    Dans le fichier membre.func.php
    On va régler les soucis d'include...

    Comme le proposait hharchi9 on va utiliser $_SERVER['DOCUMENT_ROOT']

    Donc :
    Page membre.func.php :
     
    <?php
    //*********************************************//
    //Fichier : membre.func.php
    //*********************************************//
    
    //-------------------------------------------
    // Include du fichier de connexion à la BDD
    //-------------------------------------------
    $DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
    $CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
    
    if(file_exists($CnxBDD)){
     require_once($CnxBDD) ;
    }else{
     echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
    }
    
    /**
    * function qui va recuperer les infos de l'utilisateur connecté
    */
    function infos_membre_connecte(){
    $infos=array();
    $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
    $sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
    $params = array(":pseudo"=>$pseudo);
    
    //exécution de la requête
    try{
      $prepare = $bdd->prepare($sql);
      $prepare->execute($params);
    	// on stocke le résultat de la requête dans un ARRAY
    	$infos = $prepare->fetchall();
    }catch(Exception $e){
      die('Erreur : '.$e->getMessage());
    }
    
    return $infos;
    }
    


    Page membre.php
    <div class='header'>
    <?php
     $infos = infos_membre_connecte();
     foreach($infos as $info){ 
       echo "Bienvenue ".$info['pseudo']; 
     }
    ?>
    </div>
    


    Fichier connect.php
    
    <?php
    /**
    * Fichier connect.php
    **/
    
    //--------------------------------//
    //démarrage de session
    //--------------------------------//
    if(session_id() == '') {
     session_start();
    }
    
    //--------------------------------//
    // Infos de connexion à la BDD
    $serveur = "localhost";
    $user = "root";
    $pwd = "";
    $dbname = "rs";
    //--------------------------------//
    // Connexion
    //--------------------------------//
    try {
      $bdd = new PDO ("mysql:host=".$serveur.";dbname=".$dbname.";charset=utf8", $user,$pwd);
    }catch(Exception $e) {
      die('Erreur de connexion à la BDD '.$e->getMessage());
    }
    
    ?>
    
    


    ... et pour ce qui est de ta page register ... REMETS CE QU'IL Y AVAIT AVANT !
    0
    1. J'ai pas touché au register.php, j'ai fais une erreur textuelle. Sinon j'ai appliqué toutes ces modifs (encore merci) et j'ai toujours :

      -Notice: Undefined variable: bdd in C:\wamp\www\rs\functions\membre.func.php on line 29
      -Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\rs\functions\membre.func.php on line 29
      0
  7. Modérateur
    Tu peux essayer ça pour voir ?

    <?php
    //*********************************************//
    //Fichier : membre.func.php
    //*********************************************//
    ini_set("display_errors", "1");
    error_reporting(E_ALL);
    //-------------------------------------------
    // Include du fichier de connexion à la BDD
    //-------------------------------------------
    $DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
    $CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
    
    if(file_exists($CnxBDD)){
     require_once($CnxBDD) ;
    }else{
     echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
    }
    
    /**
    * function qui va recuperer les infos de l'utilisateur connecté
    */
    function infos_membre_connecte(){
    global $bdd; // déclaration globale de BDD
    $infos=array();
    $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
    $sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
    $params = array(":pseudo"=>$pseudo);
    
    //exécution de la requête
    try{
      $prepare = $bdd->prepare($sql);
      $prepare->execute($params);
    	// on stocke le résultat de la requête dans un ARRAY
    	$infos = $prepare->fetchall();
    }catch(Exception $e){
      die('Erreur : '.$e->getMessage());
    }
    
    return $infos;
    }
    
    
    

    0
    1. Merci infiniement pour votre mobilisation !
      J'ai une page toute noire qui s'affiche lorsque je me connecte.
      0
    2. Modérateur
      @Zakarya93une page toute noire ?
      Quand tu te connecte ?

      Tu te connecte où ?
      C'est en rapport avec ton souci d'origine de ce message ?
      0
    3. Bah avant au lieu d'avoir cette page noir, j'avais 2 erreurs vous vous souvenez ? pourtant d'après mes codes et le tuto, je devrai obtenir un bandeau blanc sur fond noir avec "Bienvenue" ...

      Quand je me connecte sur mon login.php avec un identifiant et mot de passe qui est sur ma bdd
      0
    4. Modérateur
      Donc plus d'erreur visiblement...
      Donc maintenant.. il faut regarder le code qui te sert à afficher .

      par contre... c'est visiblement un NOUVELLE QUESTION .. donc ... tu clos cette discussion et tu en ouvres une autre !
      Et au passage ... tu fourniras le code source GÉNÉRÉ de ta page
      (c'est à dire .. tu affiches ta page dans ton navigateur, tu fais un clic droit dessus, tu sélectionnes "afficher le code source" ... et tu le copie/colle dans le forum )
      0
  8. C'est entendu :) j'obtiens ceci :

    <!DOCTYPE html>
    <html>
        <head>
    	  <link rel='stylesheet' href='css/style.css'>
        </head>
    	<meta charset="UTF-8" >
        <body>
              <div id='content'>
              <div class='header'>
    </div>    </div>
        </body>
    	


    Le code qui sert à afficher est celui ci n'est ce pas ?

    <div class='header'>
    <?php
     $infos = infos_membre_connecte();
     foreach($infos as $info){ 
       echo "Bienvenue ".$info['pseudo']; 
     }
    ?>
    </div>
    0
    1. Modérateur

      Le code qui sert à afficher est celui ci n'est ce pas

      Oui.

      A la limite pour tester on pourrait essayer ça :
      <div class='header'>
      <?php
       $infos = infos_membre_connecte();
      print_r( $infos );
       foreach($infos as $info){ 
         echo "Bienvenue ".isset($info['pseudo'])?$info['pseudo']:''; 
       }
      ?>
      </div>
      
      


      et dans le fichier
      <?php
      //*********************************************//
      //Fichier : membre.func.php
      //*********************************************//
      ini_set("display_errors", "1");
      error_reporting(E_ALL);
      //-------------------------------------------
      // Include du fichier de connexion à la BDD
      //-------------------------------------------
      $DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
      $CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
      
      if(file_exists($CnxBDD)){
       require_once($CnxBDD) ;
      }else{
       echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
      }
      
      /**
      * function qui va recuperer les infos de l'utilisateur connecté
      */
      function infos_membre_connecte(){
      global $bdd; // déclaration globale de BDD
      $infos=array();
      $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
      $sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
      $params = array(":pseudo"=>$pseudo);
      
      //le temps des tests:
      $infos['sql'] = $sql;
      $infos['params'] = $params;
      
      //exécution de la requête
      try{
        $prepare = $bdd->prepare($sql);
        $prepare->execute($params);
       // on stocke le résultat de la requête dans un ARRAY
       $infos = $prepare->fetchall();
      }catch(Exception $e){
        die('Erreur : '.$e->getMessage());
      }
      
      return $infos;
      }
      
      0
      1. J'obtiens un bandeau blanc sur fond noir avec "Array ()"
        0
        1. Modérateur
          modifie comme ça :
          ?php
          //*********************************************//
          //Fichier : membre.func.php
          //*********************************************//
          ini_set("display_errors", "1");
          error_reporting(E_ALL);
          //-------------------------------------------
          // Include du fichier de connexion à la BDD
          //-------------------------------------------
          $DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
          $CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
          
          if(file_exists($CnxBDD)){
           require_once($CnxBDD) ;
          }else{
           echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
          }
          
          /**
          * function qui va recuperer les infos de l'utilisateur connecté
          */
          function infos_membre_connecte(){
          global $bdd; // déclaration globale de BDD
          $infos=array();
          $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
          $sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
          $params = array(":pseudo"=>$pseudo);
          
          //le temps des tests:
          $infos['sql'] = $sql;
          $infos['params'] = $params;
          
          //exécution de la requête
          try{
            $prepare = $bdd->prepare($sql);
            $prepare->execute($params);
           // on stocke le résultat de la requête dans un ARRAY
           $infos['result'] = $prepare->fetchall();
          }catch(Exception $e){
            die('Erreur : '.$e->getMessage());
          }
          
          return $infos;
          }
          
          0
        2. @jordane45Une petite erreur s'est glissée ligne 1 ^^ <?php
          sinon j'obtiens 3 erreurs :/ que voici : http://www.noelshack.com/2015-23-1433326768-erreur.jpg
          0
        3. @jordane45apparement ça concerne la ligne 6 de membre.php pour les 3 erreurs
          0
        4. Modérateur
          Oui.
          car ta requête ne retourne rien visiblement. .
          tu l'as testée en direct dans ta BDD ? ?
          0
        5. J'ai pas touché ma bdd, juste pour voir la section "utilisateurs" pour vérifier que j'avais bien le bon identifiant. Que dois je y faire ? :(
          0
      2. Modérateur
        Dans ta bdd .. tu prends la requête que tu as dans ton code ... tu remplaces la variable par celle qui est présente dans ta page ( le print que je t'ai fait ajouter....) et tu testes la requête directement dedans (via phpmyadmin par exemple ou via un logiciel comme heidisql : https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql )

        Et donc.. la requête à tester est :
        SELECT * FROM profil 
        WHERE pseudo ='xzak47'
        


        et pour ce qui est du message d'erreur, essayes ça :
        
        <div class='header'>
        <?php
         $result= infos_membre_connecte();
        //----------------------------------------//
         //le temps des tests :
        //----------------------------------------//
         echo "<pre> Result de la fonction : <br>";
         print_r( $infos );
         echo "</pre>";
        //----------------------------------------//
        
         $infos  = $result['result'];
         foreach($infos as $info){ 
           $pseudo = isset($info['pseudo'])?$info['pseudo']:'';
           echo "Bienvenue ". $pseudo; 
         }
        ?>
        </div>
        
        0
        1. 1/ Pour la requete SQL, j'obtiens "erreur SQL (1146) , table "rs.profil" doesn't exist"
          2/ lorsque je me connecte avec le script que vous venez de me donnez, j'obtiens Parse error: syntax error, unexpected 'echo' (T_ECHO) in C:\wamp\www\rs\pages\membre.php on line 15

          en message d'erreur
          0
        2. Modérateur
          @Zakarya93Pour le echo il manquait un point.
          j'ai édité mon message précédent.

          Pour le pb de requête. .. le message est clair... ta table ne se nomme pas comme ça ou n'existe pas !
          0
        3. @jordane45Après rajout du point, j'ai toujours ce Parse error: syntax error, unexpected 'echo' (T_ECHO) in C:\wamp\www\rs\pages\membre.php on line 15

          <div class='header'>
          <?php
           $result= infos_membre_connecte();
          //----------------------------------------//
           //le temps des tests :
          //----------------------------------------//
           echo "<pre> Result de la fonction : <br>";
           print_r( $infos );
           echo "</pre>";
          //----------------------------------------//
          
           $infos  = $result['result'];
           foreach($infos as $info){ 
             $pseudo = isset($info['pseudo'])?$info['pseudo']:''
             echo "Bienvenue ". $pseudo; 
           }
          ?>
          </div
          


          sinon pour le pb de requete, il faut donc que je crée cette table rs.profil ?
          0
        4. Modérateur
          @Zakarya93Ligne 14 .. manque un point virgule.

          Pour la table. ... ben oui !
          0
        5. Modérateur
          Ta table
          ... se nomme.... UTILISATEURS ... et non pas PROFILS !!
          0