8791 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

J'ai un dysfonctionnement dans mon code :

Je choisis une valeur dans une liste de sélection :

<form name="form" method="post" action="autresactions.php">
<select name="action" size="1" onchange="this.form.submit()">
				<option value="insert" selected="selected">Insertion d'une information</option>
				<option value="maj">Mise &agrave; jour d'une information</option>
				<option value="delete">Suppression d'une information</option>
				<option value="select">Sélection d'une information</option>
			  </select>
			<input type="hidden" name="btn" value="Envoyer" />
</form>

Je passe la valeur choisie à mon code PHP :

Un var_dump($_POST); me montre ce que contient le tableau super global $_POST :

a écrit :
array(1) { ["action"]=> string(6) [B][SIZE="4"]"delete"[/SIZE][/B]


Je mets la valeur reçu directement dans une variable de session :

_SESSION['action_en_cours'] = "";
	//je mets le nom de l'action dans une variable afin de pouvoir l'utiliser plus loin dans le nom des boutons, dans le nom du formulaire....
	switch($_POST['action'])
	{
		case 'maj':
			$_SESSION['action_en_cours'] = "Mise a jour";
			break;
		case 'delete':
			$_SESSION['action_en_cours'] = "Suppression";
			break;
		case 'select':
			$_SESSION['action_en_cours'] = "Afficher";
			break;		
	}


si je fais ceci quand je choisis delete:

var_dump($_SESSION);


J'obtiens ceci :

[QUOTE]array(1) { ["action_en_cours"]=> string(11) "Suppression" } [/QUOTE]

après avoir fait ceci :

window.location=('autresactions.php');


La valeur de ma variable $_POST['action'] et de ma variable $_SESSION['action_en_cours'] perdent leur valeur 8O

Session :
a écrit :
{ ["action_en_cours"]=> string(0) "" }

$_POST:
a écrit :
array(0) { }


Sauriez-vous me dire si il y a moyen d'arranger ce genre de problème ?

Merci d'avance.

beegees
Modifié par beegees (13 Apr 2009 - 17:26)
Salut,

beegees a écrit :
après avoir fait ceci :

window.location=('autresactions.php');


La valeur de ma variable $_POST['action'] et de ma variable $_SESSION['action_en_cours'] perdent leur valeur 8O

ce qui est normal puisque dans ce cas le formulaire n'est pas soumis et du coup $_POST['action'] n'existe pas et comme juste avant le switch tu initialises $_SESSION['action_en_cours'] à blanc...

PS: depuis le temps tu devrais savoir que le BBCode se note en minuscules : Smiley cligne
Salut Yohan,

Merci pour ta réponse.

En attendant une réponse, j'ai réfléchi et je suis arrivé au même raisonnement que toi.

J'ai donc mis en commentaire la ligne qui met à rien la variable de session => ça ne change rien.

Est-il possible en PHP de faire une action une seule fois (un peu comme include_once ou require_once) ?

Cela me permettrait de ne pas revenir dans le code d'initialisation de ma variable $_POST


Merci encore pour ton aide.

beegees

PS: désolé pour le BBCode
beegees a écrit :
Est-il possible en PHP de faire une action une seule fois (un peu comme include_once ou require_once) ?
Non mais normalement il devrait suffire de n'effectuer une action que dans certains cas.

Typiquement je verrais bien un
if(isset($_POST['action'])) {
   // Traitements
}

D'autre part je me trompe peut-être mais on dirait que tu te compliques la vie : pourquoi ne pas tout faire dans la même page (affichage du formulaire et traitements) ?
Re,

Merci pour ta réponse.

J'ai essayé ceci :

if(isset($_POST['action']))
	{
		switch($_POST['action'])
		{
			case 'maj':
				$_SESSION['action_en_cours'] = "Mise a jour";
				$_SESSION['deja_passe'] = 1;
				break;
			case 'delete':
				$_SESSION['action_en_cours'] = "Suppression";
				$_SESSION['deja_passe'] = 1;
				break;
			case 'select':
				$_SESSION['action_en_cours'] = "Afficher";
				$_SESSION['deja_passe'] = 1;
				break;		
		}
	}


sans succès

et même

if($_POST['action']!="")
	{
		switch($_POST['action'])
		{
			case 'maj':
				$_SESSION['action_en_cours'] = "Mise a jour";
				$_SESSION['deja_passe'] = 1;
				break;
			case 'delete':
				$_SESSION['action_en_cours'] = "Suppression";
				$_SESSION['deja_passe'] = 1;
				break;
			case 'select':
				$_SESSION['action_en_cours'] = "Afficher";
				$_SESSION['deja_passe'] = 1;
				break;		
		}
	}


aussi sans succès.

Tu es d'accord avec moi que la variable de session devrait garder sa valeur dans ces deux cas ?

Merci pour ta précieuse aide.

beegees
Modifié par beegees (13 Apr 2009 - 17:21)
beegees a écrit :
Tu es d'accord avec moi que la variable de session devrait garder sa valeur dans ses deux cas ?
Si et seulement si ta page commence bien par un session_start(); Smiley cligne

Mais j'insiste : à priori tes variables de session seraient inutiles en utilisant une page unique...
Ah Yohan, que ferais-je sans toi Smiley ravi

Honte à moi, ce n'est pas la première fois que j'oublie ! Smiley fache

Encore un super grand merci à toi et à bientôt .

beegees Smiley cligne