Notice: Undefined variable: infos [Résolu/Fermé]

Signaler
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
-
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
-
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

Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
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
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
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 :/
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
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
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8 >
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020

J'obtiens :

Result de la fonction :

Array ( [0] => Array ( [id] => 16 [0] => 16 [pseudo] => xzak47 [1] => xzak47 [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 xzak47

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

(Adresse mail supprimée par la modération)
Messages postés
29559
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2020
2 781 >
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017

Il suffit de retirer le PRINT que je t'avais fais mettre pour les tests....
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
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'];
Messages postés
29559
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2020
2 781
<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
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
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;
}
Messages postés
29559
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2020
2 781
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>
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8 >
Messages postés
29559
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2020

VOUS ETES REMARQUABLE !! que Dieu vous garde merci merci merci :) Topic résolu !