Pb avec les sessions : variable de session inaccessible

Répondre
chardeneamour
le 13/06/2005 à 17:29
chardeneamour
Oui j'ai mis session_start() sur tte les pages qui doivent utiliser les variables sessions et je ne comprends rien de rien.

Voici le code de la page ajout_personne.php
<? 
session_start();
//Création de la variable de session id_utilisateur
$_SESSION['IDUser'] = $IDUser;
/*
si la variable de session login n'existe pas cela siginifie que le visiteur
n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
acceder à l'espace membres
*/
if(!isset($_SESSION['login'])) {
echo 'Vous n\'êtes pas autoriser à acceder à cette zone';
include('login.htm');
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
// On commence par récupérer les champs
if(isset($_POST['prenom'])) $prenom=$_POST['prenom'];
else $prenom="";

if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";

if(isset($_POST['code_sexe'])) $code_sexe=$_POST['code_sexe'];
else $code_sexe="";

if(isset($_POST['nom_JF'])) $nom_JF=$_POST['nom_JF'];
else $nom_JF="";

if(isset($_POST['date_naiss'])) $date_naiss=$_POST['date_naiss'];
else $date_naiss="";

if(isset($_POST['lieu_naiss'])) $lieu_naiss=$_POST['lieu_naiss'];
else $lieu_naiss="";

if(isset($_POST['adr'])) $adr=$_POST['adr'];
else $adr="";

if(isset($_POST['code_pays'])) $code_pays=$_POST['code_pays'];
else $code_pays="";

if(isset($_POST['gsm'])) $gsm=$_POST['gsm'];
else $gsm="";

if(isset($_POST['tel'])) $tel=$_POST['tel'];
else $tel="";

if(isset($_POST['email'])) $email=$_POST['email'];
else $email="" ;

if(isset($_POST['sit_fam'])) $sit_fam=$_POST['sit_fam'];
else $sit_fam="";

if ($_POST['code_sexe'] == "Masculin")
{ $code_sexe= 1; }
else if ($_POST['code_sexe']== "Feminin")
{$code_sexe= 2; }

if ($_POST['code_pays'] == "Congo")
{ $code_pays=242;}
else if
($_POST['code_pays']=="France"){ $code_pays=33; }
else if
($_POST['code_pays']=="Maroc") { $code_pays==212; }

//AFFICHAGE DES DONNEES POUR VOIR SI ELLES EXISTENT

echo "<br> prenom = $prenom <br>nom = $nom <br> nom_JF = $nom_JF <br> code_sexe = $code_sexe<br>
code_pays=$code_pays<br> date_naiss= $date_naiss<br> lieu_naiss = $lieu_naiss<br>
adr = $adr<br> gsm = $gsm<br> tel = $tel<br> email = $email<br> sit_fam = $sit_fam<br>";

// On vérifie si les champs sont vides
if(empty($prenom) OR empty($nom) OR empty($nom_JF) OR empty($code_sexe) OR empty($code_pays) OR empty($date_naiss) OR empty($lieu_naiss) OR empty($adr) OR empty($gsm) OR empty($tel) OR empty($email) OR empty($sit_fam))
{
echo"empty ok";
echo '<font color="red">Attention, seul les champs <b> Nom de Jeune fille </b> et <b>Téléphone</b> peuvent rester vide !</font>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// connexion à la base
include ("connexion_eurocall.php");
$id = MYSQL_CONNECT($host,$user,$pass);
mysql_select_db("$bdd");

// on teste si le bouton submit à été pressé par l'utilisateur puis
// on écrit la requête sql pour inséré les données dans la table personne
if (isset($_POST['Submit']))
{
$sql ="INSERT INTO personne(nom, prenom,code_sexe,code_pays, nom_JF, date_naiss, lieu_naiss, adr,gsm, tel, email, sit_fam)
VALUES ('$nom', '$prenom', '$code_sexe', '$code_pays','$nom_JF', '$date_naiss','$lieu_naiss', '$adr', '$gsm','$tel', '$email', '$sit_fam')";
$n_pers = mysql_insert_id();

// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur
echo 'Vos infos ont été bel et bien ajoutées.';
// echo '<meta http-equiv="refresh" content="0;URL=formation.html">';
}
// déconnexion à la base
mysql_close();
}
?>
</body>
</html>


Le comble c'est que j'ai mon enregsitrement qui se passe ms, j'ai ceci comme message :
Notice: Undefined variable: IDUser in c:\program files\easyphp1-8\www\site_recrutemnt\ajout_personne.php on line 4

prenom = eshana
nom = niolaud
nom_JF = niolaud
code_sexe = 2
code_pays=242
date_naiss= 07/04/1982
lieu_naiss = Brazzaville
adr = 904 rue moulenda
gsm = 6658987
tel = 6647889
email = darelleducoeur@yahoo.fr
sit_fam = célibataire
Vos infos ont été bel et bien ajoutées.


La ligne 4 c'est celle-ci :
$_SESSION['IDUser'] = $IDUser;

Bien, alors je ne comprends plus rien à moisn ce qu'il faudrait que je fasse des modification sous easyphp ou je ne sais trop quoi ! smiley

Je présume que je vais m'affoler dans peu de tps avec cette histoire !
jedasy lova
zebden
le 13/06/2005 à 17:42
zebden
Pourtant c'est clair comme message , $IDUser est indéfini donc n'existe pas.
zebdinou pour les intimes / Blog : http://www.zebden.fr
chardeneamour
le 13/06/2005 à 17:59
chardeneamour
Oui il dit qu'il n'existe pas, ms lorsque j'affche les coordonnées de la personne authentifier lors de sa connexion, elle existe vraiment.

Voici le code de la page login3.php qui fait le traitement de la page Authentification.html

<? session_start();
include ("connexion_eurocall.php");
$id = MYSQL_CONNECT($host,$user,$pass);
mysql_select_db("$bdd");

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pass from user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['pass'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('sinscrire.html'); // On inclus le formulaire d'identification
exit(); }
else {
$data =mysql_fetch_array(mysql_query("SELECT IDUser FROM user WHERE login='$login'"));
$_SESSION['IDUser']=$data['IDUser'];
$_SESSION['login'] = $_POST['login'];
$_SESSION['pass']=$_POST['pass'];
echo 'Vous etes bien logué';
echo 'Votre login est '.$_SESSION['login'].'; et votre mot de pass est '.$_SESSION['pass'].'; et IDUser est '.$_SESSION['IDUser'].'.';

echo '<body onload="alert(\'Membre logué avec succès\')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=info_personne.html">';

}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('Authentification.html'); // On inclut le formulaire d'identification
exit;
}
?>


Tout y est alors je ne comprends pas pourquoiil n'arrive pas à le retrouver !

Aidez-moi , sinon je vaois tombé malade smiley smiley
jedasy lova
chardeneamour
le 13/06/2005 à 18:06
chardeneamour
Est ce que c'est possible que ce osit un pb avec easyphp ? smiley
Peut être qu'il y'a une configuration qui a été modifier ou j ne sais trop comment !
jedasy lova
LA GLOBULE
le 13/06/2005 à 18:08
LA GLOBULE
La variable n'existe pas, c'est tout.
C'est pas EasyPHP ou PHP qui te fait une farce...

Il faut déclarer cette variable.

Essaye de voir à quel moment cette variable "disparait".
chardeneamour
le 13/06/2005 à 18:27
chardeneamour
Cette variable disparait après que je l'ai fait affiché ! et que je fais appel au formulaire info_personne.html afin de commencer à enregsitrer les informations sur la personne.
Voic le code de login3.php
<? session_start();
include ("connexion_eurocall.php");
$id = MYSQL_CONNECT($host,$user,$pass);
mysql_select_db("$bdd");

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pass from user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['pass'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('sinscrire.html'); // On inclus le formulaire d'identification
exit(); }
else {
$data =mysql_fetch_array(mysql_query("SELECT IDUser FROM user WHERE login='$login'"));
$_SESSION['IDUser']=$data['IDUser'];
$_SESSION['login'] = $_POST['login'];
$_SESSION['pass']=$_POST['pass'];
echo 'Vous etes bien logué';
echo 'Votre login est '.$_SESSION['login'].'; et votre mot de pass est '.$_SESSION['pass'].'; et IDUser est '.$_SESSION['IDUser'].'.';

echo '<body onload="alert(\'Membre logué avec succès\')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=info_personne.html">';

}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('Authentification.html'); // On inclut le formulaire d'identification
exit;
}
?>


Après avoir affiché les infomations de la personne en faisant ceci :
echo 'Votre login est '.$_SESSION['login'].'; votre mot de pass est '.$_SESSION['pass'].'; et IDUser est  '.$_SESSION['IDUser'].'.';

ensuite je fais appel au formulaire info_personne.html en faisant ceci :
echo '<meta http-equiv="refresh" content="0;URL=info_personne.html">';

Bien, je présume que c'est à ce niveau là que le contenut de la variable session disparait ? smiley
smiley je ne sais plus quoi faire sincèrement
jedasy lova
chardeneamour
le 13/06/2005 à 18:48
chardeneamour
Je viens de faire une echo du login et de l'id avant d'afficher les information qui ont été enregistré et je remarque slmt que juste le login est présent et l'iduser que j'ai eu à utiliser n'existe pas. Donc si je comprends bien, elle ne s'est surement pas enregsitrer comme le login, pourtant ils st tt 2 dans la bd .

Voici le bot de code que j'i utiliser pour pouvoir vois mon login et mon mot de passe :
if(!isset($_SESSION['login'])) {
echo 'Vous n\'êtes pas autoriser à acceder à cette zone';
}
else { echo 'le login est:' .$_SESSION['login'] ;
echo "<br>";
echo 'ID est :' .$_SESSION['IDUser'];
}


Mnt s'il y'a une personne qui peut m'epliquer comment c'est possible, merci à elle ! smiley
jedasy lova
moogli
le 13/06/2005 à 18:49
moogli
a quoi sert le extract si tu utilise $_POST ?

le message d'erreur que tu a indique de $IDUSER n'exsite pas, ceci parce que sur la ligne 4 tu fait $_SESSION['IDuser'] =$IDuser; alors que tu devrais faire l'inverse : $IDuser =$_SESSION['IDuser'];
si tu souhaite utilise $IDuser dans le script.

SI tu pense qu'il s'agit d'une valeur issue d'un formulaire alors utilise $_POST afin d'utiliser cette valeur.

Dans ton les cas, une affectation sur une variable de session (dans ton cas) ne doit etre fait qu'une seul fois et dans le script de vérification de login. Les infos utilisateurs ne doivent pas être chahger autre part.

si ton server est configuré avec register_global = On il est possible qu'il y ai des confil entre $_POST et $_SESSION, ou meme entre $IDuser et $_SESSION['IDuser'] !


smiley
Il en faut peu pour être heureux !!!!!
moogli
le 13/06/2005 à 18:54
moogli
j'ai oublié, tu devrais vérifier, si ta requete retourne quelque chose putot que de l'utiliser deirectement.
$data =mysql_fetch_array(mysql_query("SELECT IDUser FROM user WHERE login='$login'"))

fait plutot
<?php
$sql = "SELECT IDUser FROM user WHERE login='$login'";
$req = mysql_query($sql) or die ('Erreur SQL'.$sql.'<br/>'.mysql_error());
if (mysql_num_rows($req) == 1 ) {
$data =mysql_fetch_array( $req);
}
else {
erreur plusieurs membre avec le meme login <img src="https://static.lephpfacile.com/img/smiley/icon_wink.gif" alt="smiley" class="smiley" />
}
?>

smiley
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours