Notice: Undefined variable: infos

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

J'obtiens ceci : http://www.noelshack.com/2015-23-1433332144-erreur.jpg

Membre.php :
<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


Membre.func.php :

<?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 utilisateurs 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;
}


Une solution svp ? Merci d'avance :)

2 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    A la ligne 8 du fichier Membre.php tu essayes d'afficher la variable $infos alors que celle-ci n'existe pas encore.
    La solution est de déplacer ton affichage de test (le code de la ligne 4 à la ligne 10) après l'affectation de la variable $infos (donc après la ligne
    $infos = $result['result'];
    ).

    Bonne journée
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci de ta réponse ! ligne 4 ou 3 tu veux dire ? sinon j'ai déplacé le code ligne 3 et j'ai le meme probleme :/
      0
    2. Pitet Messages postés 2845 Statut Membre 530
       
      code incorrect :
      print_r($infos); // on affiche $infos alors qu'elle n'est pas définie -> erreur
      $infos = $result['result']; // on défini la variable $infos
      


      code correct :
      $infos = $result['result']; // on défini la variable $infos
      print_r($infos); // on affiche $infos
      
      0
      1. Zakarya93 Messages postés 1026 Statut Membre 10 > Pitet Messages postés 2845 Statut Membre
         
        J'obtiens :

        Result de la fonction :

        Array ( [0] => Array ( [id] => 16 [0] => 16 [pseudo] => machintruc [1] => machintruc [password] => df70f9b975b42116ee6c0231a7e6ead0bbb283aa [2] => df70f9b975b42116ee6c0231a7e6ead0bbb283aa [email] => xxx@gmail.com [3] => xxx@gmail.com [sexe] => Homme [4] => Homme [apropos] => salut les gens [5] => salut les gens ) ) Bienvenue machintruc

        alors que je veux seulement "bienvenue machintruc "... :/

        (Adresse mail supprimée par la modération)
        0
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > Zakarya93 Messages postés 1026 Statut Membre
         
        Il suffit de retirer le PRINT que je t'avais fais mettre pour les tests....
        0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Dites moi si j'ai bon :

      $infos['result'] = $prepare->fetchall();


      plutôt faire ceci

      $result = $prepare->fetchall();
      if(count($result)!=0) $infos['result'] = $result[0];
      else $infos['result'] = null;
      


      car je cherche pas a avoir qu'un seul user... cela permettra de n'avoir qu'un seul tableau qui correspond bien à mon user.
      Et du coup dans ùon fichier Membre.php, je teste si $result['result'] n'est pas null et j'affiche directement mon user ainsi :

      if ($result['result']!=null) echo $result['result']['pseudo'];
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    <div class='header'>
    <?php
     $result= infos_membre_connecte();
     $infos  = $result['result'];
    if(count($infos)>0){
     foreach($infos as $info){
       $pseudo = isset($info['pseudo'])?$info['pseudo']:'';
       echo "Bienvenue ". $pseudo;
     }
    }
    ?>
    </div>
     


    Cordialement,
    Jordane
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Pas d'erreurs mais c'est affiché sur un bandeau blanc avec fond noir : Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue Bienvenue

      Mon membre.func.php :

      <?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 utilisateurs 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
      $result = $prepare->fetchall();
      if(count($result)!=0) $infos['result'] = $result[0];
      else $infos['result'] = null;
      }catch(Exception $e){
        die('Erreur : '.$e->getMessage());
      }
      
      return $infos;
      }
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Déjà .. évites quand tu le peux.. de faire des IF ELSE comme ça .. et préfères utiliser l'écriture TERNAIRE
      if(count($result)!=0) $infos['result'] = $result[0];
      else $infos['result'] = null;
      

      Revient à écrire plus simplement :
      $infos['result'] = (count($result)>0) ? $result[0]  : NULL; 
      


      Et donc dans ta page d'affichage tu peux ensuite mettre :
      <div class='header'>
      <?php
       $result= infos_membre_connecte();
       $infos  = $result['result'];
      if(count($infos)>0){
         $pseudo = isset($infos['pseudo'])?$infos['pseudo']:'';
         echo "Bienvenue ". $pseudo;
      }else{
       echo "<br> Aucun résultat.";
      }
      ?>
      </div>
      
      0
      1. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        VOUS ETES REMARQUABLE !! que Dieu vous garde merci merci merci :) Topic résolu !
        0