Erreur Notice: Trying to get property

Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 28 janv. 2014 à 20:47
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 2 févr. 2014 à 12:11
Bonjour
Vraiment quelques choses de très bizarre........
J'ai un menu avec 2 liens
Modifier mon profil et Liste des membres.

Les membres se connecte et arrive sur ses 2 liens
Modifier mon profil marche impec ensuite Liste des membres marche impec

Mais lorsqu'il est sur la page Liste des membre et qu'il veux par exemple modifier son profil et bizarre ça me met un message d'erreur

Notice: Trying to get property of non-object in

Alors que directement à l'ouverture du compte ça marche nickel avec le lien
Modifier mon profil.
J'espère que vous pouvez comprendre mon problème et je vous remercie très sincérement par avance de votre aide.

17 réponses

labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
29 janv. 2014 à 00:28
Bonjour
En fait cette erreur je l'ai réparé, mon problème viens de tout autre chose.
Lorsque je clique sur le lien "Modifier mon profil" ça fonctionne
http://localhost/mon_site/index.php?body=form_profil&type=compte&action=edit&id_adherent=11

dès que je clique sur un autre lien dans le menu et que je reviens sur le lien "Modifier mon profil" ça me supprime l'id regarder ci-dessous
http://localhost/mon_site/index.php?body=form_profil&type=compte&action=edit&id_adherent=


Merci vraiment de pouvoir m'aider je suis vraiment dans le désespoir total.
Merci beaucoup
0
Utilisateur anonyme
29 janv. 2014 à 09:00
Bonjour

Pas possible de te répondre sans plus de précisions.
Habituellement, on ne propage pas un id_adherent da page en page dans les url : on se sert d'une variable de session. Dans ce cas, le "&id_adherent=" est en trop
Mais si pour une raison quelconque tu tiens absolument à cette méthode, alors le "&id_adherent=" est incomplet.

Dans les deux cas, il suffit de regarder où il est généré pour le corriger.

Le script est-il de toi, ou s'agit-il d'un script tout fait que tu as adapté ?
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
29 janv. 2014 à 09:12
Bonjour
Oui le script est de moi mais je suis débutant et essai de faire un site pour mon assos de musique.

En fait j'ai créé de SESSION pour que les membre se connecte

<?php
if (isset($_SESSION['login']) && $_SESSION['login'] != NULL) {
   $login = $_SESSION['login'];
	  $sql = "SELECT tb_gestion_adherent.id_adherent, tb_gestion_adherent.civilite, tb_gestion_adherent.nom, tb_gestion_adherent.prenom, tb_gestion_adherent.adresse_mail, tb_gestion_adherent.date_naissance, tb_gestion_adherent.telephone_fixe, tb_gestion_adherent.telephone_mobile, tb_gestion_adherent.adresse, tb_gestion_adherent.lieu_dit, tb_gestion_adherent.code_postal, tb_gestion_adherent.ville, tb_gestion_adherent.login, tb_gestion_adherent.pass
		 FROM tb_gestion_adherent
		 WHERE login='$login'";
	  $requete = $bdd->prepare($sql);
	  $requete->execute();
	  $donnees = $requete->fetch(PDO::FETCH_ASSOC);
}
?>


Ensuite je souhaite afficher ldes liens suivant le type de membre ce qui donne

<?php
$modifie_profil		= '';
$liste_profil		= '';
$gestion_admin		= '';
$gestion_sortie		= '';

	if($_SESSION['categorie_statut']=='Gestion Admin')
   {
$gestion_admin = '<img src="image/membre.png" width="20px" height="20px" align="top" /><a href="./index.php?body=menu_admin&type=admin">Gestion Admin</a>';
   }
	if($_SESSION['categorie_statut']=='Gestion Sortie')
   {
$modifie_profil =	'<img src="image/modifier.png" width="20px" height="20px" align="top" /><a href="./index.php?body=form_profil&type=compte&action=edit&id_adherent='.$donnees['id_adherent'].'" onclick="ad_user();">Modifier mon profil</a>';
$liste_profil =		'<img src="image/book.png" width="20px" height="20px" align="top" /><a href="./index.php?body=liste_profil&type=compte">Liste des membres</a>';
$gestion_sortie =	'<img src="image/notes.png" width="20px" height="20px" align="top" /><a href="./index.php?body=gestion_sortie&type=compte">Gestion des sorties</a>';
   }
	if($_SESSION['categorie_statut']=='User')
   {
$modifie_profil =	'<img src="image/modifier.png" width="20px" height="20px" align="top" /><a href="./index.php?body=form_profil&type=compte&action=edit&id_adherent='.$donnees['id_adherent'].'">Modifier mon profil</a>';
$liste_profil =		'<img src="image/book.png" width="20px" height="20px" align="top" /><a href="./index.php?body=liste_profil&type=compte">Liste des membres</a>';
   }
if (isset($_GET['body']) && $_GET['body'] == 'form_profil')		{ $modifie_profil 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Modifier mon profil</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'liste_profil')	{ $liste_profil 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Liste des membres</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'gestion_admin')	{ $gestion_admin 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Gestion Admin</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'gestion_sortie')	{ $gestion_sortie 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Gestion des sorties</span>'; }
?>

<div class="GestionAdmin">
   <ul>
	  <li><?php echo $modifie_profil; ?></li>
	  <li><?php echo $liste_profil; ?></li>		  
	  <li><?php echo $gestion_admin; ?></li>
	  <li><?php echo $gestion_sortie; ?></li>
   </ul>
</div>


Merci beaucoup si vous avez un peu de temps pour moi.
0
Utilisateur anonyme
29 janv. 2014 à 11:05
À quoi sert l'id_adherent dans le lien puisque tu mémorises la personne connectée grâce à $_SESSION['login'] ? Je ne vois vraiment pas l'utilité, cette information dans l'url fait double emploi avec ta variable de session.

Si ça ne marche pas, c'est probablement que tu n'as pas session_start(); au début de chacune de tes pages. Il faut le mettre complètement au début, aussitôt après le premier <?php
0

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

Posez votre question
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
29 janv. 2014 à 19:31
Bonjour

Si ma SESSION start est au début de ma page index.php je peux me connecter sans problème à différente page qui font référence à ma BDD donc ça fonctionne.
Il y a ce fameux id_adherent que je ne comprend pas c'est vrai j'ai essayé de changer cet id dans l'URL c'est pas normal qu'on puisse modifier l'URL de cette façon.
Peux tu me dire comment je peux m'y prendre afin de changer cette URL.

tp://localhost/mon_site/index.php?body=form_profil&type=compte&action=edit&id_adherent=11

Je te joint mon fichier de vérif si tu peux éventuellement me donner ton avis?
Merci beaucoup
<?php
//on teste si le visiteur a soumis le formulaire
if (!empty($_POST)) {
    
    //on vérifie si le login et password ne sont pas vide, nulle ou non définie
    if (!empty($_POST['login']) && (!empty($_POST['pass']))) {
        
		//on récupère les valeurs des champs
        $login = trim($_POST['login']); //supprime les espaces en début et fin de chaine
        $login = htmlspecialchars($login, ENT_QUOTES); // supprime les caracteres speciaux html dans la chaine
        $login = stripslashes($login); // Supprime les antislashs d'une chaîne.       
        
        $pass = trim($_POST['pass']);
        $pass = htmlspecialchars($pass, ENT_QUOTES);
        $pass = stripslashes($pass);
		        
        //cryptage sha1 du mot de pass
        //$pass = sha1($pass);
        
        //on sélectionne les champs que l'on veut récupèrer et on teste les champs login et password
	$sql = 'SELECT tb_gestion_adherent.id_adherent, tb_gestion_adherent.nom, tb_gestion_adherent.prenom, tb_gestion_adherent.adresse_mail, tb_gestion_adherent.login, tb_gestion_adherent.pass, tb_gestion_admin.categorie_statut, tb_gestion_membre.sortant
		FROM tb_gestion_adherent
		INNER JOIN tb_gestion_membre
		ON tb_gestion_adherent.id_adherent = tb_gestion_membre.rid_adherent
		INNER JOIN tb_gestion_admin 
		ON tb_gestion_adherent.id_adherent = tb_gestion_admin.rid_adherent
		WHERE login=:login
		AND pass=:pass
		AND tb_gestion_membre.sortant = 0';
	$requete = $bdd->prepare($sql);								
    //on execute la requète en lui transmettant la liste des paramètres
    $requete->execute(array(
							':login' => $login,
							':pass' => $pass
							));
    //on affiche les reponses de la requète dans un tableau
    $donnees = $requete->fetch(PDO::FETCH_ASSOC);
        
        //si le password est différent on met un message d'erreur
        if ($donnees['pass'] != $pass) {
            echo "<span class='erreur'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>";

        //sinon c'est bon
        } else {		
				//on cré des variables accessibles depuis toutes les pages
				$_SESSION['id_adherent']      	= $donnees['id_adherent'];
				$_SESSION['nom']              	= $donnees['nom'];
				$_SESSION['prenom']           	= $donnees['prenom'];
				$_SESSION['adresse_mail']     	= $donnees['adresse_mail'];
				$_SESSION['categorie_statut'] 	= $donnees['categorie_statut'];
				$_SESSION['login']            	= $donnees['login'];
            
				// Utiliser la redirection ---------------
				redir("index.php?body=compte_profil&type=compte");
            
				}
    } else 	{
			echo "<span class='erreur'>Veuillez remplir tous les champs !!!</span>";
			}
}
?>


Cordialement
0
Utilisateur anonyme
29 janv. 2014 à 22:49
Si ma SESSION start est au début de ma page index.php je peux me connecter sans problème à différente page qui font référence à ma BDD donc ça fonctionne.
1 - Je ne vois pas le rapport
2 - Non, il ne suffit pas de mettre session_start() (et non pas SESSION start) au début de la page index.php : il FAUT le mettre au début de chaque page. L'as-tu bien fait ?
3 - Non, ça ne fonctionne pas. Si ça fonctionnait, tu ne serais pas ici.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
29 janv. 2014 à 23:06
Bonjour
En fait je me suis mal expliqué.

C'est bien "session_start();" que j'ai mis en début de page sur toutes ça c'est ok.

En fait j'ai fait une page que j'ai nommé "menu_profil" qui contiens les différents lien pour certaines pages. (ci-dessous)

<?php
$modifie_profil		= '';
$liste_profil		= '';
$gestion_admin		= '';
$gestion_sortie		= '';

	if($_SESSION['categorie_statut']=='Gestion Admin')
   {
$gestion_admin = '<img src="image/membre.png" width="20px" height="20px" align="top" /><a href="./index.php?body=menu_admin&type=admin">Gestion Admin</a>';
   }
	if($_SESSION['categorie_statut']=='Gestion Sortie')
   {
$modifie_profil =	'<img src="image/modifier.png" width="20px" height="20px" align="top" /><a href="./index.php?body=form_profil&type=compte&action=edit&id_adherent='.$donnees['id_adherent'].'" onclick="ad_user();">Modifier mon profil</a>';
$liste_profil =		'<img src="image/book.png" width="20px" height="20px" align="top" /><a href="./index.php?body=liste_profil&type=compte">Liste des membres</a>';
$gestion_sortie =	'<img src="image/notes.png" width="20px" height="20px" align="top" /><a href="./index.php?body=gestion_sortie&type=compte">Gestion des sorties</a>';
   }
	if($_SESSION['categorie_statut']=='User')
   {
$modifie_profil =	'<img src="image/modifier.png" width="20px" height="20px" align="top" /><a href="./index.php?body=form_profil&type=compte&action=edit&id_adherent='.$donnees['id_adherent'].'">Modifier mon profil</a>';
$liste_profil =		'<img src="image/book.png" width="20px" height="20px" align="top" /><a href="./index.php?body=liste_profil&type=compte">Liste des membres</a>';
   }
if (isset($_GET['body']) && $_GET['body'] == 'form_profil')		{ $modifie_profil 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Modifier mon profil</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'liste_profil')	{ $liste_profil 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Liste des membres</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'gestion_admin')	{ $gestion_admin 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Gestion Admin</span>'; }
if (isset($_GET['body']) && $_GET['body'] == 'gestion_sortie')	{ $gestion_sortie 	='<span class="StyleClickSousProfil"><img src="image/bouton_ok.png" width="22px" height="22px" align="top" />Gestion des sorties</span>'; }
?>

<div class="GestionAdmin">
   <ul>
	  <li><?php echo $modifie_profil; ?></li>
	  <li><?php echo $liste_profil; ?></li>		  
	  <li><?php echo $gestion_admin; ?></li>
	  <li><?php echo $gestion_sortie; ?></li>
   </ul>
</div>


Sur chaque page pour que je puisse avoir les liens identique j'ai fait un include comme ceux ci.

<?php include('menu_profil.php'); ?>


Lorsque j'ouvre une SESSION je clique sur le lien modifier mon profil ça marche avec bien sur l'id_adherent passée en URL qui n'est pas recommandé.

Ensuite j'ouvre une autre page ça marche aussi mais si je veux revenir sur modifier mon profil là ça ne marche plus.
C'est très bizarre.
Merci si vous pouvez passer un peu de votre temps pour m'expliquer.
Cordialement
0
Utilisateur anonyme
30 janv. 2014 à 08:55
Si le champ après id_adherent est vide, c'est que $donnees['id_adherent'] est vide.
Normalement, $donnees['id_adherent'] est initialisé par ta requête qui est lancée quand $_SESSION['login'] n'est pas vide.

Ajoute un print_r ($_SESSION) ; au début de ton script (mais après session_start() pour voir ce qui reste de ta session.

Remarque : je persiste à ne pas comprendre à quoi sert de passer l'id_adherent dans l'url, puisque tu le mémorises dans une variable de session. Enfin, c'est toi qui vois.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
31 janv. 2014 à 06:17
Bonjour

Je suis vraiment NUL NUL NUL.............
En effet j'avais pas pensé à faire "<?php print_r ($_SESSION) ;?>
cela ma retourné le tableau avec toutes les données qu'il fallait.
Alors je me suis dity donc il y a quelque chose de tout Kon à réglé.
Après quelques minutes voir plus bien sur je me suis apercç que je n'avait pas fait un include de ma page menu_profil.php dans compte_profil.php.
Alors c'est vraiment Kon d'autant plus que je n'ai pas pense à print_r.
Alors un grand merci de m'avoir éguilller.

Il me reste à régler cette histoire de id passé en url car les personnes peuvent changer cette id pour se retrouver sur un autre compte.
As tu une idée s'il te plait?
Encore un grand merci
0
Utilisateur anonyme
31 janv. 2014 à 10:31
Oui j'ai une idée.
Deouis le début je te le dis : ne passe pas cet id_adherent dans tes url, il ne sert à rien puisque tu disposes déjà de l'information dans tes variables de session. Si tu as besoin de savoir qui est connecté, une fois passée la page de login, ne te sers plus des url, sers-toi des variables de session : elles sont là pour ça.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
1 févr. 2014 à 22:40
Bonjour
J'ai passé une bonne parie de la journée sans résultat pour supprimer id_adherent passer en url.
J'ai même essayé Rewriting URL mais ça ne fonctionnais pas comme je le souhaite.
Alors je voudrais savoir si tu peux encore m'aider à résoudre mon problème.
Je te remercie
0
Utilisateur anonyme
1 févr. 2014 à 23:46
Je n'ai jamais utilisé l'url rewriting, je ne t'aiderai pas là-dessus.
Pour ce qui est de supprimer l'id_adherent, je veux bien t'aider, à condition que tu me dises où il y a un problème car je n'en vois pas.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
1 févr. 2014 à 23:53
En fait je récupere les infos des membres avec ce lien

http://localhost/mon_site/index.php?body=form_profil&type=compte&action=edit&id_adherent=11


si un membre change l'id 11 comme exemple du lien par un autre numéro il y a de grande chance qu'il se retrouve sur les infos d'un autre membre.

Merci
0
Utilisateur anonyme
1 févr. 2014 à 23:58
Retire &id_adherent='.$donnees['id_adherent'].' quand ça apparaît dans ton script.
Par exemple :
$modifie_profil =	'<img src="image/modifier.png" width="20px" height="20px" align="top" /><a href="./index.php?body=form_profil&type=compte&action=edit">Modifier mon profil</a>';
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
2 févr. 2014 à 00:25
Les données ne s'affiche pas......
0
Utilisateur anonyme
2 févr. 2014 à 01:29
Tu sais comment il marche, ton script ? Je suppose que oui, puisque tu m'as répondu dès le début (message #3) : "Oui le script est de moi"
Si tu arrivais à faire afficher tes données avec $_GET['id_adherent'], tu dois y arriver tout pareil avec $_SESSION['id_adherent'].
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
2 févr. 2014 à 12:11
En affichant mes données avec $_SESSION['id_adherent'] ça reviens pareil si je met le même lien ça me retourne les id des membres.
Il y a quelques chose que je ne comprends pas c'est très possible.
Je ne veux pas aller plus loin avant de résoudre ce problème.
Je vais encore rester cet aprèm la-dessus.
Merci de ton aide
0