Page 1 sur 1

variable de session

Posté : 03 sept. 2018, 21:05
par phibad
Bonjour
J'ai un problème avec les variables de session.
Il s'agit d'un fichier d'une association. Dans cette page, la secrétaire doit pouvoir choisir un membre et mettre son id en variable de session, pour, dans les pages suivantes, afficher les coordonnées du membre, et les modifier, et lui attribuer une activité.
L'id du membre que choisit la secrétaire est dans ce code idmembrechoisi.
Comme la page suivante affiche un formulaire vide, j'ai vérifié si l'idmembrechoisi est bien en variable de session à la fin de cette page. A la fin du code, un vardump me dit que il y a bien la variable de session de la secrétaire, mais pas celle du membre.
La ligne
echo "variable de session idmembrechoisi : ". $_SESSION['idmembrechoisi']." == variableidmembrechoisi : ".$idmembrechoisi
n'affiche pas la valeur de $_SESSION['idmembrechoisi'] mais affiche celle $idmembrechoisi
Je ne comprends pas. Il y a bien une égalité !
Si quelqu'un peut me faire sortir de cette impasse !
<?php
session_start();
$pseudo =isset($_SESSION['pseudo']) ?$_SESSION['pseudo']:"";
$mp =isset($_SESSION['mp']) ?$_SESSION['mp']:"";

$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";
$idmembrechoisi= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:NULL;
$_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:"";
$_POST['idmembrechoisi']= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:"";
$submit=isset($_POST['submit'])?$_POST['submit']:"";


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>accueil</title>
<meta http-equiv="content-type" content="text/html; charset=utf8" />

<link rel="StyleSheet" href="style2.css" type="text/css">
</head>
<body>

<div class="bloc_page">
<?php


include ("fonction.php");
include ("bonjour3.php");

?>
<h1>Afficher les coordonnées d'un membre</h1>
<FORM method="post" action ="secraff1membre1.php" >
<select name="idmembrechoisi" > <option value="idmembrechoisi">Faites votre choix puis VALIDEZ ! </option>
<?php
$reponse = $bdd->query('SELECT * FROM membres ORDER BY nom');
while ($donnees = $reponse->fetch()){
echo "<OPTION Value=\"".$donnees[0]." \">".$donnees['nom']." ".$donnees['prenom']." ".$donnees['idmembre']."</OPTION>";
$_SESSION['idmembrechoisi']== $donnees['idmembre'];
}?>
</select>

<input type="submit" name="submit" value="Valider ">
</FORM>

<p><a href="indextsr6.php">Retour au menu</a></p>
<?php
var_dump($_SESSION);
$_SESSION['idmembrechoisi']== $idmembrechoisi;
echo "variable de session idmembrechoisi : ". $_SESSION['idmembrechoisi']." == variableidmembrechoisi : ".$idmembrechoisi

?>
<br /><br />

</div>
</body>
</html>

Re: variable de session

Posté : 03 sept. 2018, 23:00
par or 1
==, c'est pour comparer
=, c'est pour affecter une valeur à une variable

Re: variable de session

Posté : 03 sept. 2018, 23:07
par phibad
Bravo. Merci, ça marche. Je me sens bête mais je suis soulagé...

Re: variable de session

Posté : 03 sept. 2018, 23:48
par phibad
Mais maintenant pourquoi ma variable de session n'arrive pas sur la page suivante ?
Elle commence par <?php session_start();
La variable de session de la secrétaire (phibad) passe normalement, mais pas la variable de session du membre (idmembrechoisi) dont elle veut modifier les coordonnées.
Le var dump placé en début de la deuxième page répond :  array(2) { ["pseudo"]=> string(6) "phibad" ["idmembrechoisi"]=> string(0) "" }

Voici le code :

Code : Tout sélectionner

<?php session_start(); //ini_set ('session.bug_compat_42', 0); //ini_set ('session.bug_compat_warn', 0); $pseudo =isset($_SESSION['pseudo']) ?$_SESSION['pseudo']:""; $mp =isset($_SESSION['mp']) ?$_SESSION['mp']:""; $pseudo =isset($_POST['pseudo']) ?$_POST['pseudo']:""; $mp =isset($_POST['mp']) ?$_POST['mp']:""; $nom =isset($_POST['nom']) ?$_POST['nom']:""; $prenom =isset($_POST['prenom']) ?$_POST['prenom']:""; $nele =isset($_POST['nele']) ?$_POST['nele']:""; $sexe =isset($_POST['sexe']) ?$_POST['sexe']:""; $parentM =isset($_POST['parentM']) ?$_POST['parentM']:""; $parentnom =isset($_POST['parentnom']) ?$_POST['parentnom']:""; $parentprenom =isset($_POST['parentprenom']) ?$_POST['parentprenom']:""; $email =isset($_POST['email']) ?$_POST['email']:""; $idmembrechoisi= isset($_SESSION['idmembre'])?$_SESSION['idmembre']:""; $idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:""; $_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:""; $submit=isset($_POST['submit'])?$_POST['submit']:""; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>secrétariat</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rel="StyleSheet" href="style2.css" type="text/css"> </head> <body bgcolor="#FFFFFF"> <?php include("bandeauhaut2.php"); include ("fonction.php"); include ("bonjour3.php"); var_dump($_SESSION); if($submit!=''){ ?> <form method="POST" action="secraff1membre2.php "> <?php $req= $bdd->prepare('SELECT * FROM membres WHERE idmembre=:idmembrechoisi') ; $req->execute(array('idmembrechoisi'=>$_SESSION['idmembrechoisi'])); while ($donnees=$req->fetch()){ //password_verify($_POST['mp'], $donnees['mp']); echo (" <h1>".$donnees['prenom']." ".$donnees['nom']." n°".$donnees['idmembre']." pseudo : ".$donnees['pseudo']."</h1>"); ?> <p>idmembre </p> <input type="text" value= "<?php echo $donnees['idmembre']; ?>" name="idmembre" > <p>Pseudo </p> <input type="text" value= "<?php echo $donnees['pseudo']; ?>" name="pseudo" > <p>Nom </p> <input type="text" value= "<?php echo $donnees['nom']; ?>" name="nom"> <p>Prénom </p> <input type="text" value = "<?php echo $donnees['prenom']; ?>" name="prenom"> <p>Date de naissance (aaaa-mm-jj)</p> <input type="text" value = "<?php echo $donnees['nele']; ?>" name="nele"> (...) <br /><br /> <input type="submit" name="submit" value="Enregistrer les modifications" class="submit"> <br /><br /> <br /><p><a href="indextsr6.php">Retour au menu</a></p> </form> <?php } else{ $req=$bdd->prepare('UPDATE floritaimembres SET nom=:nom, prenom=:prenom, nele=:nele,sexe=:sexe, parentM=:parentM, parentnom=:parentnom,parentprenom=:parentprenom, email=:email, numrue=:numrue, cp=:cp, ville=:ville, tel1=:tel1, tel2=:tel2, licence=:licence WHERE idmembre=:idmembrechoisi'); $req->execute(array('nom'=>$nom, 'prenom'=>$prenom, 'nele'=>$nele,'sexe'=>$sexe, 'parentM'=>$parentM, 'parentnom'=>$parentnom,'parentprenom'=>$parentprenom, 'email'=>$email, 'numrue'=>$numrue, 'cp'=>$cp, 'ville'=>$ville, 'tel1'=>$tel1, 'tel2'=>$tel2, 'licence'=>$licence,'idmembrechoisi'=>$_SESSION['idmembrechoisi'])); } ?> </table><br /><br /> <br /><a href="indextsr6.php">Retour </a></p> </div> <br /> </div> </body> </html>

Re: variable de session

Posté : 06 sept. 2018, 09:39
par phibad
Bonjour
J'ai trouvé une piste, mais je ne sais pas comment faire.
Dans cette page (secraff1membre1.php), il s'agit de choisir un membre pour modifier les données dans la page suivante (secraff1membre2.php).
Dans mon formulaire qui va proposer la liste des membres, je devrais pouvoir écrire

Code : Tout sélectionner

<FORM method="post" action ="secraff1membre2.php" >
Dans ce cas, ma variable de session, l'id du membre choisi, ne passe pas à la page suivante.
Par contre, si je mets

Code : Tout sélectionner

<FORM method="post" action ="secraff1membre1.php" >
et si je fais un détour par un lien en ajoutant dans le code la ligne 56 :

Code : Tout sélectionner

echo (" <p>Accéder à la page de <a href=\"secraff1membre2.php\">".$donnees['prenom']." ".$donnees['nom']."</p></a>");
dans ce cas, la variable de session passe à la page suivante...
Je suppose qu'il s'agit de la place dans le code de la création de la variable de session, j'ai essayé beaucoup de positions...
Quelqu'un pourrait-il m'expliquer ?

Code : Tout sélectionner

<?php session_start(); $pseudo =isset($_SESSION['pseudo']) ?$_SESSION['pseudo']:""; $mp =isset($_SESSION['mp']) ?$_SESSION['mp']:""; $idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:""; $idmembrechoisi= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:NULL; $_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:""; $_POST['idmembrechoisi']= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:""; $submit=isset($_POST['submit'])?$_POST['submit']:""; //$action=isset($_POST['action'])?$_POST['action']:"afficher"; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>accueil</title> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <link rel="StyleSheet" href="style2.css" type="text/css"> </head> <body> <div class="bloc_page"> <?php include("bandeauhaut2.php"); include ("fonction.php"); include ("bonjour3.php"); ?> <h1>Afficher les coordonnées d'un membre</h1> <?php ?> <FORM method="post" action ="secraff1membre1.php" > <select name="idmembrechoisi" > <option value="idmembrechoisi">Faites votre choix puis VALIDEZ ! </option> <?php $reponse = $bdd->query('SELECT * FROM membres ORDER BY nom'); while ($donnees = $reponse->fetch()){ echo "<OPTION Value=\"".$donnees[0]." \">".$donnees['nom']." ".$donnees['prenom']." ".$donnees['idmembre']."</OPTION>"; $_SESSION['idmembrechoisi']= $idmembrechoisi; }?> </select> <input type="submit" name="submit" value="Valider "> </FORM> <?php $req= $bdd->prepare('SELECT * FROM membres WHERE idmembre=:idmembre') ; $req->execute(array('idmembre'=>$_SESSION['idmembrechoisi'])); while ($donnees=$req->fetch()){ //password_verify($_POST['mp'], $donnees['mp']); echo (" <p>Accéder à la page de <a href=\"secraff1membre2.php\">".$donnees['prenom']." ".$donnees['nom']."</p></a>"); $_SESSION['pseudomembrechoisi']=$donnees['pseudo']; } ?> </div> </body> </html>

Re: variable de session

Posté : 06 sept. 2018, 09:50
par Maitrepylos
Bonjour, on peux s'assurer que vous êtes correcte dès le début.
Dans votre deuxième post nous avons ceci

Code : Tout sélectionner

$idmembrechoisi= isset($_SESSION['idmembre'])?$_SESSION['idmembre']:""; $idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:""; $_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:"";
Hors je ne vois nulle part $_SESSION['idmembrechoisi'], a moins que cela vienne d'une autre page ?
Sinon dans ce cas c'est d'office ""

Re: variable de session

Posté : 11 sept. 2018, 19:27
par phibad
Bonjour
Je n'ai pas compris la réponse. J'avance en tâtonnant. C'est aléatoire...

Re: variable de session

Posté : 11 sept. 2018, 19:36
par Maitrepylos
ok, alors on commence par ceci :

Code : Tout sélectionner

$idmembrechoisi= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:NULL; $_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:""; $_POST['idmembrechoisi']= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:"";
Donc on commence par

Code : Tout sélectionner

$idmembrechoisi= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:NULL;
Cette partie me semble correcte, si on a un post alors on affecte la variable

Code : Tout sélectionner

$_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:"";
Ce bout de code laisse sous-entendre, que la session pourrais être active, ok mais où ?

Pour finir, pourquoi remettre une valeur existants ou non dans une variable global qui est censé contenir cette valeur :

Code : Tout sélectionner

$_POST['idmembrechoisi']= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:"";

Re: variable de session

Posté : 12 sept. 2018, 11:12
par phibad
Merci, ça marche. J'ai essayé en enlevant les lignes

Code : Tout sélectionner

$_SESSION['idmembrechoisi']= isset($_SESSION['idmembrechoisi'])?$_SESSION['idmembrechoisi']:""; $_POST['idmembrechoisi']= isset($_POST['idmembrechoisi'])?$_POST['idmembrechoisi']:"";
une à une puis en les remettant. Ca marche dans tous les cas, c'est-à-dire que la variable de session arrive sur ma page 2. Donc ces lignes étaient inutiles.
Et j'ai dû faire une autre modification ailleurs. Bref, pour la rigueur, c'est exigeant !
Et j'ai des bizarreries : des codes qui marchent dans wamp mais pas en ligne... je posterai si je ne trouve pas.
Merci à vous !

Re: variable de session

Posté : 12 sept. 2018, 11:18
par Maitrepylos

Et j'ai des bizarreries : des codes qui marchent dans wamp mais pas en ligne... je posterai si je ne trouve pas.
Typiquement Windows - Linux, cela est du à un manque de rigueur.

En windows (wamp dans votre cas), ceci fonctionnera :

Code : Tout sélectionner

$windows = 'os un peu léger' echo $WinDows //os un peu léger

Par en ligne cela ne fonctionneras pas (car j'imagine que vous êtes chez un hébergeur type OVH ), la plupart de hébergeurs tournent sous Linux et que celui-ci est case sensistive

Code : Tout sélectionner

$windows = 'os un peu léger' echo $WinDows //erreur car $windows est diférent de $WinDows