Warning: Invalid argument supplied for foreach()

Résolu
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   -  
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai cette erreur : Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\membre.php on line 31

Voici mon membre.php :
<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.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
<div class='menu'>
       <ul>
	           <li><a href="index.php?page=membre">Accueil</a></li>
			   <li><a href="">Changer vos informations</a></li>
			   <li><a href="">les membres</a></li>
			   <li><a href="">Vos amis</a></li>
			   <li><a href="">Invitations</a></li>
			   <li><a href="">Messages</a></li>
			   <li class="nbr"><?php echo nombre_membre() > 1 ? nombre_membre()." membres" : nombre_membre(). " membre"; ?></li>
       </ul>
</div>
<div class="info">
        <?php  
          foreach($infos as $info)
		  {
			    ?> 
				        <p><strong>Email</strong><em><?php echo $info['email']; ?></em></p>
			            <p><strong>Sexe</strong><em><?php echo $info['sexe']; ?></em></p>
						<p><strong>A propos de vous</strong><em><?php echo $info['apropos']; ?></em></p>
                <?php			  
 			  
		  }
		
        ?>
</div>


Merci d'avance ;)

8 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Quand je demandais .. quel code tu as utilisé .... c'était ...
"Quel code tu as utilisé .... pour ENREGISTRER les données dans ta bdd ... " ?

Au passage ... les accolades ne sont pas nécéssaires aux lignes 31 et 38 !
.. et comme pour tous le reste... il est préférable de récupérer les variables AVANT de les utiliser .. (avec un ISSET + écriture TERNAIRE ! )
<?php
  // récupérations des variables AVANT de les utiliser
  $email   = isset($infos['email'])?$infos['email']:'';
  $sexe    = isset($infos['sexe'])?$infos['sexe']:'';
  $apropos = isset($infos['apropos'])?$infos['apropos']:'';
 ?> 
<div class="info">
 <p><strong>Email :</strong><em><?php echo $email; ?></em></p>
 <p><strong>Sexe :</strong><em><?php echo $sexe; ?></em></p>
 <p><strong>A propos de vous :</strong><em><?php echo $apropos; ?></em></p>
</div>



Cordialement,
Jordane
1
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
Merci bien !
vous parlez de ce code ?

<?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();
      $infos['result'] = (count($result)>0) ? $result[0]  : NULL;
   }
   catch(Exception $e)
   {
      die('Erreur : '.$e->getMessage());
   }
}

//la function qui va compter le nombre de personnes inscrites
function nombre_membre() {
global $bdd; // déclaration globale de BDD
$req = $bdd->query("SELECT id FROM utilisateurs")or die(print_r($bdd->errorInfo()));
return $req->rowCount();
}
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
et que me suggériez vous pour ce soucis svp :) ?

1/ Dans mon espace membre, en haut à droite j'ai écris "Aucun résultat" ( http://www.noelshack.com/2015-23-1433354604-erreur.jpg ) au lieu de "Bienvenue [pseudo]" ( http://www.noelshack.com/2015-23-1433354604-erreur.jpg )
0
Utilisateur anonyme
 
Et i tu fais un var_dump($infos) juste avant ta boucle, ça te retourne quoi?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Tu as repris le code de ta précédente question pour ton fichier membre.func.php ????
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Sachant que ... attention....
ta fonction
infos_membre_connecte();

ne retourne qu'une seule ligne ...celle du USER CONNECTE...

donc ... le
 foreach($infos as $info)
est inutile ...

Tu peux directement écrire :
 <p><strong>Email</strong><em><?php echo $infos['email']; ?></em></p>
 <p><strong>Sexe</strong><em><?php echo $infos['sexe']; ?></em></p>
<p><strong>A propos de vous</strong><em><?php echo $infos['apropos']; ?></em></p>
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci c'est nickel ! juste : pourquoi j'ai pas affiché les données que j'ai entré lors de la phase d'inscription ?? normalement il le fait automatique
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
<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.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
<div class='menu'>
       <ul>
	           <li><a href="index.php?page=membre">Accueil</a></li>
			   <li><a href="">Changer vos informations</a></li>
			   <li><a href="">les membres</a></li>
			   <li><a href="">Vos amis</a></li>
			   <li><a href="">Invitations</a></li>
			   <li><a href="">Messages</a></li>
			   <li class="nbr"><?php echo nombre_membre() > 1 ? nombre_membre()." membres" : nombre_membre(). " membre"; ?></li>
       </ul>
</div>
<div class="info">
        <?php  
		  {
			    ?> 
				        <p><strong>Email :</strong><em><?php echo $infos['email']; ?></em></p>
                        <p><strong>Sexe :</strong><em><?php echo $infos['sexe']; ?></em></p>
                        <p><strong>A propos de vous :</strong><em><?php echo $infos['apropos']; ?></em></p>
                <?php			  
 			  
		  }
		
        ?>
</div>
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 

pourquoi j'ai pas affiché les données que j'ai entré lors de la phase d'inscription ?? normalement il le fait automatique

Ben ... je ne sais pas .... comment les as tu enregistré dans ta BDD ?
- Quel code as tu utilisé ?
- As tu vérifié dans ta BDD que les infos étaient bien présentes ?
- Tu n'as bien qu' UN SEUL enregistrement pour le pseudo avec lequel tu fais les tests ?
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
Code :
<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.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
<div class='menu'>
       <ul>
	           <li><a href="index.php?page=membre">Accueil</a></li>
			   <li><a href="">Changer vos informations</a></li>
			   <li><a href="">les membres</a></li>
			   <li><a href="">Vos amis</a></li>
			   <li><a href="">Invitations</a></li>
			   <li><a href="">Messages</a></li>
			   <li class="nbr"><?php echo nombre_membre() > 1 ? nombre_membre()." membres" : nombre_membre(). " membre"; ?></li>
       </ul>
</div>
<div class="info">
        <?php  
		  {
			    ?> 
				        <p><strong>Email :</strong><em><?php echo $infos['email']; ?></em></p>
                        <p><strong>Sexe :</strong><em><?php echo $infos['sexe']; ?></em></p>
                        <p><strong>A propos de vous :</strong><em><?php echo $infos['apropos']; ?></em></p>
                <?php			  
 			  
		  }
		
        ?>
</div>


-Oui
-Oui
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Ta question est :
pourquoi j'ai pas affiché les données que j'ai entré lors de la phase d'inscription ?? normalement il le fait automatique

.....

Tu y parles des données que tu as entré dans la phase d'inscription....... je suppose donc que tu as un formulaire dans lequel les utilisateurs saisissent les infos (c'est bien de ça que tu parles non ? )
... et donc... que tu devrais avoir le code PHP qui permet d'insérer ces données dans une BDD.
(et donc.. non.. ce n'est pas automatique ! )
Il faut faire une requête de type INSERT ....

INSERT INTO utilisateurs (email,sexe,pseudo .....)
VALUES ('toto@mmmm.fr','M','toto'. ...)




0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
Mais pourquoi pour https://www.youtube.com/watch?v=Ns3VWhCqsN4 ça a été automatique ??
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Dans la video .. il montre comment AFFICHER les données présentent en BASE ....
Je ne vois pas le moment où il fait l'inscription via un formulaire ....!

Pour qu'on soit bien sur la même longueur d'onde .. quand tu parles d'automatique .. c'est à quel sujet ?
Pour l'affichage ? ou pour l'insertion en base ??
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
L'affichage, pour la vidéo tuto il n'a rien insérer seul le code a suffit pour afficher les données qui sont dans la bdd
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
Vers 2:39 c'est automatique :/
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 

pour la vidéo tuto il n'a rien insérer seul le code a suffit pour afficher les données qui sont dans la bdd

..... donc ... il a inséré MANUELLEMENT des données dans sa BDD .... et donc ... son code sert ( uniquement ) à les afficher .... ok !

Donc.. ton souci est lequel EXACTEMENT ?
rien ne s'affiche ??
Tu as essayé de faire un PRINT de la variable pour voir ce qu'elle contenait ?
Tu as testé la requête en direct dans ta BDD pour t'assurer qu'elle était bonne ?

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

//-------------------------------------------------//
 // Pour savoir ce que contient ta variable :
//-------------------------------------------------//
echo "<pre> result : <br>";
print_r($result);
echo "</pre>";
//-------------------------------------------------//

 $infos  = $result['result'];

0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 


J'obtiens un membre supplémentaire à mon compteur??? et un "résultat:" en haut à droite
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
... tu peux nous donner le code source de la page générée (tu sais... click droit sur la page.. afficher le code source....)
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
<!DOCTYPE html>
<html>
    <head>
	  <link rel='stylesheet' href='css/style.css'>
    </head>
	<meta charset="UTF-8" >
    <body>
          <div id='content'>
          ?<div class='header'>
<pre> result : <br></pre><br> Aucun résultat.<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
<div class='menu'>
       <ul>
	           <li><a href="index.php?page=membre">Accueil</a></li>
			   <li><a href="">Changer vos informations</a></li>
			   <li><a href="">les membres</a></li>
			   <li><a href="">Vos amis</a></li>
			   <li><a href="">Invitations</a></li>
			   <li><a href="">Messages</a></li>
			   <li class="nbr">3 membres</li>
       </ul>
</div>
<div class="info">
         
<div class="info">
 <p><strong>Email :</strong><em></em></p>
 <p><strong>Sexe :</strong><em></em></p>
 <p><strong>A propos de vous :</strong><em></em></p>
</div>    </div>
    </body>
	
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Il t'affiche donc :

<pre> result : <br></pre>

... donc .. aucun résultat venant de cette fonction !

Peux tu nous montrer de nouveau ce que contient ta fonction infos_membre_connecte
(j'espère que tu avais corrigé le RETURN que tu avais retiré par mégarde..... !!! )
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 
<?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();
      $infos['result'] = (count($result)>0) ? $result[0]  : NULL;
   }
   catch(Exception $e)
   {
      die('Erreur : '.$e->getMessage());
   }
}

//la function qui va compter le nombre de personnes inscrites
function nombre_membre() {
global $bdd; // déclaration globale de BDD
$req = $bdd->query("SELECT id FROM utilisateurs")or die(print_r($bdd->errorInfo()));
return $req->rowCount();
}


Je n'ai toujours pas compris aussi pourquoi j'ai eu 1 membre de plus au compteur ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
... et ben non .. tu n'as pas corrigé !!!
function infos_membre_connecte(){
   global $bdd; // déclaration globale de BDD
   $infos=array();

   // Récupération variable de session PSEUDO
   $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
   
   //préparation de la requete :
   $sql = "SELECT * FROM utilisateurs WHERE pseudo = :pseudo";
   $params = array(":pseudo"=>$pseudo);
  
   //stocke la requête et les paramêtres dans la variable de retour (cela facilite le debogage au cas où ! )
   $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();
      $infos['result'] = (count($result)>0) ? $result[0]  : NULL;
   } catch(Exception $e){
      die('Erreur : '.$e->getMessage());
   }

//  /!\ NE PAS OUBLIER DE FAIRE UN RETURN !!
return $infos;

}//Fin de la fonction




Je n'ai toujours pas compris aussi pourquoi j'ai eu 1 membre de plus au compteur ?

Je t'ai dis quoi tout à l'heure ????
Prends les soucis UN PAR UN !

0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10
 



TOUT EST REPARE PRESQUE ! les infos membres ainsi que le bienvenue xzak47 sauf que j'ai plein de phrases juste au dessus de celui-ci...
0
hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   24
 
Enlève le
print_r($result);
, tu n'en a plus besoin.
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10 > hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'arrive pas à le trouver :/
0
hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   24
 
Ici il me semble :

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

//-------------------------------------------------//
 // Pour savoir ce que contient ta variable :
//-------------------------------------------------//
echo "<pre> result : <br>";
print_r($result);
echo "</pre>";
//-------------------------------------------------//

 $infos  = $result['result'];
0
Zakarya93 Messages postés 984 Date d'inscription   Statut Membre Dernière intervention   10 > hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention  
 
Ah c'est bon, j'ai mtn un "résult :" au dessus de bienvenue xzak47 comment puis je l'enlever ?

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

//-------------------------------------------------//
 // Pour savoir ce que contient ta variable :
//-------------------------------------------------//
echo "<pre> result : <br>";

echo "</pre>";
//-------------------------------------------------//

 $infos  = $result['result'];
if(count($infos)>0){
   $pseudo = isset($infos['pseudo'])?$infos['pseudo']:'';
   echo "Bienvenue ". $pseudo;
}else{
 echo "<br> Aucun résultat.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
<div class='menu'>
       <ul>
	           <li><a href="index.php?page=membre">Accueil</a></li>
			   <li><a href="">Changer vos informations</a></li>
			   <li><a href="">les membres</a></li>
			   <li><a href="">Vos amis</a></li>
			   <li><a href="">Invitations</a></li>
			   <li><a href="">Messages</a></li>
			   <li class="nbr"><?php echo nombre_membre() > 1 ? nombre_membre()." membres" : nombre_membre(). " membre"; ?></li>
       </ul>
</div>
<div class="info">
        <?php
  // récupérations des variables AVANT de les utiliser
  $email   = isset($infos['email'])?$infos['email']:'';
  $sexe    = isset($infos['sexe'])?$infos['sexe']:'';
  $apropos = isset($infos['apropos'])?$infos['apropos']:'';
 ?> 
<div class="info">
 <p><strong>Email :</strong><em><?php echo $email; ?></em></p>
 <p><strong>Sexe :</strong><em><?php echo $sexe; ?></em></p>
 <p><strong>A propos de vous :</strong><em><?php echo $apropos; ?></em></p>
</div>
0
hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   24
 
Enlève ça :

echo "<pre> result : <br>";

echo "</pre>";
0