Php: probleme avec variables de sessions

Fermé
christophe - 17 sept. 2005 à 12:06
 christophe - 19 sept. 2005 à 10:42
Bonjour,
J'essaye de remplir un formulaire avec des variables de sessions, comme ceci:

1- catalogue.php
[code]
$_SESSION["piece1"] = $_GET["idpiece1"] ;
$_SESSION["piece2"] = $_GET["idpiece2"] ;
$_SESSION["piece3"] = $_GET["idpiece3"] ;

if(isset($_SESSION["piece1"]))
$lien2= "<A HREF=\"catalogue.php?piece=$piece&idpiece2=$piece2\">+</A>";
elseif(isset($_SESSION["piece2"]))
$lien2= "<A HREF=\"catalogue.php?piece=$piece&idpiece3=$piece3\">+</A>";
else
$lien2= "<A HREF=\"catalogue.php?piece=$piece&idpiece1=$piece1\">+</A>";

[/code]

Mon but est que la premiere fois qu'on clique sur le lien (+), la variable $_SESSION["piece1"] prenne la valeur de $piece1, en suite qu'au 2° clic, la variable $_SESSION["piece2"] prenne la valeur de $piece2, puis qu'au 3° clic la variable $_SESSION["piece3"] prenne la valeur de $piece3.

2- formulaire.php

[code]
<tr>
<td align="center"><INPUT TYPE=TEXT NAME="piece1" VALUE="<? echo $_SESSION['piece1']; ?>" SIZE=40></td>
</tr>
<tr>
<td align="center"><INPUT TYPE=TEXT NAME="piece2" VALUE="<? echo $_SESSION['piece2']; ?>" SIZE=40></td>
</tr>
<tr>
<td align="center"><INPUT TYPE=TEXT NAME="piece3" VALUE="<? echo $_SESSION['piece3']; ?>" SIZE=40></td>
</tr>
[/code]

Ce qui se passe c'est qu'au premier clic ca marche (la variable $piece1 va bien remplir la premiere ligne), mais au second clic la variable $piece2 va remplir la deuxieme ligne mais la premiere ligne c'est effacee, pareil au troisieme.

Merci d'avance a celui qui pourra me mettre sur la voie
A voir également:

6 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
18 sept. 2005 à 02:23
J'essayerais
if(isset($_GET["idpiece1"]))
{
$_SESSION["piece1"] = $_GET["idpiece1"] ;
}
etc...
0
Merci de ton aide, malheureusement ça fait toujours pareil ...
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
18 sept. 2005 à 16:06
salut,
Une question en passant, t'as mis un session_start() au début du script avant
tout affichage ou header() ?
0
Bonsoir,
oui bien entendu c'est la premiere chose que j'ai faite, d'ailleurs sinon cela ne marcherait meme pas pour la premiere variable il me semble
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
18 sept. 2005 à 21:32
Si ça fonctionnerait car PHP sait créer des tableaux dynamiques même s'il
s'appelle $_SESSION et comme tu sors la piece1 d'un get, ton tableau est
affecté mais lors de la prochaine page la persitance du tableau est perdu.

Sinon pour ton problème, dont je ne comprends pas bien l'enjeu,
met dans tes pages en commentaire html le resultat de print_r($_SESSION)
et vérifie si ça semble cohérent vis à vis de tes attentes.
Glisse ça après la balise html lors de la génération de la page
echo "<!-- SESSION=\n" ;
print_r( $_SESSION ) ;
echo "-->\n" ;
 

Ensuite tu demandes l'affichage du source de ta page à ton navigateur
pour vérifier cette info de debug.

Sinon je vois pas bien à quoi sert formulaire.php puisque tout tes liens
sont sur catalogue.php...

A+, crabs
0

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

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
18 sept. 2005 à 21:22
Ah oui il faut tester les $_GET avec isset, sinon par exemple:
$_SESSION["piece1"] = $_GET["idpiece1"] ;

Si $_GET["idpiece1"] n'existe pas (car c'est par exemple le tour de idpiece2 d'être dans l'url), alors $_SESSION["piece1"] reprendra une valeur vide (au pire tu auras même une erreur)...

Non il faut faire comme le dit jisisv, et avec les trois variables de session.
0
Merci à tous,
j'ai en fait résolu ainsi:

IF($piece1 == NULL)
{
$piece1 = $_POST["idpiece"] ;
$_SESSION["piece1"] = $piece1;
}
elseIF($piece == NULL)
{
$piece2 = $_POST["idpiece"] ;
$_SESSION["piece2"] = $piece2;
}
0