Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2011, 03h58   #1
Invité de passage
 
Inscription : mars 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 4
Points : 1
Points : 1
Par défaut Conservation des variables de formulaire

Bonjour à tous
Je débute en PHP mais je sais que le sujet a été abordé un certain nombre de fois, mais j'ai beau chercher ici et ailleurs je ne trouve pas de solution claire...

A partir d'un formulaire, je voudrais traiter les données dans la même page, afficher le résultat du traitement, et mettre un lien retour vers le formulaire et que celui-ci m'affiche toujours les données saisies avant le traitement.

J'ai fait un bout de code simplifié, juste pour comprendre le fonctionnement et la syntaxe :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<html>
<head>
<title>Travaux code php</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body>
 
<?php
if(!empty($_POST['nom']))
{
echo 'Bonjour '; echo $_POST['nom']; echo ' !<br><br><a href="index.php">- retour -</a>';
}
else
{
echo'
<form name="ajout" method="post" action="">
<table width="300px">
<tr>
<td>Nom : </td><td><input type="text" name="nom" size="40" value="" ></td>
</tr>
</table>
<br>
<input type="reset" name="effacer" value="Effacer">
<input type="submit" name="ajout" value="Ajouter">
</form>
';
}
?>
 
</body>
</html>
J'ai essayé de manipuler les variables de session mais j'ai pas trouvé, j'ai tenté en ajoutant la variable $_POST dans le value de mon input, j'ai essayé avec la variable dans le lien du retour...

J'espère avoir posté au bon endroit...

Merci d'avance pour vos éclaircissements
BigYann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 11h00   #2
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 441
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 441
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Bonjour,

Pour pouvoir utiliser les variables de session avec PHP, tu dois démarrer une session de manière explicite :
Code :
1
2
3
4
 
<?php
session_start();
?>
Voici ton code avec une mise en session du nom :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html>
<head>
<title>Travaux code php</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body>
 
<?php
session_start();
if(!empty($_POST['nom']))
{
	$_SESSION['nom']=$_POST['nom'];
}
if(!empty($_SESSION['nom'])){
	echo 'Bonjour '; echo $_SESSION['nom']; echo ' !<br><br><a href="index.php">- retour -</a>';
}
else
{
echo'<form name="ajout" method="post" action="">
	<table width="300px">
	<tr>
	<td>Nom : </td><td><input type="text" name="nom" size="40" value="" ></td>
	</tr>
	</table>
	<br>
	<input type="reset" name="effacer" value="Effacer">
	<input type="submit" name="ajout" value="Ajouter">
	</form>';
}
?>
</body>
</html>
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 13h08   #3
Invité de passage
 
Inscription : mars 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 4
Points : 1
Points : 1
Merci pour cette réponse.
Mais cette fois je ne vois pas si ça marche car le retour au formulaire ne se fait plus, je reste sur le bonjour $_SESSION['nom']...
N'y a-t-il pas quelque chose à faire au niveau du lien ou du value de l'input ?

Mon objectif réel (mais je voudrais d'abord comprendre avec un code tout simple) est un formulaire pour saisir des données comptables dans un BDD mysql.
Je voudrais donc afficher le résultat d'un premier envoi et pouvoir revenir au formulaire avec les saisies précédentes encore dans les champs de manière à n'en modifier qu'un ou deux pour la saisie suivante, etc...
BigYann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 15h51   #4
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
si tu veux récupérer le nom lors du retour et sans utiliser de session, tu peux créer un formulaire également lors de l'affichage du Bonjour avec un champs cacher pour le nom voici un exemple:

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<html>
<head>
<title>Travaux code php</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body>
 
<?php
$nom=$_POST['nom'];
$retour=$_POST['retour'];
if(!empty($nom) and empty($retour))
{
echo 'Bonjour '; echo $_POST['nom']; echo ' !<br><br>';
echo '	<form name="ajout" method="post" action="">
			<input type="hidden" name="nom" value="'.$nom.'">
			<input type="submit" name="retour" value="retour">
		</form>';
}
else
{
	echo'
	<form name="ajout" method="post" action="">
		<table width="400px">
			<tr>
				<td>Nom : </td>
				<td><input type="text" name="nom" size="40" value="'.$nom.'" ></td>
		</tr>
		</table>
		<br>
		<input type="reset" name="effacer" value="Effacer">
		<input type="submit" name="ajout" value="Ajouter">
	</form>
	';
}
 
 
?>
 
</body>
</html>

Attention si tu as besoin du nom ailleur que lors du retour je te conseille également les variables de session.
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 18h19   #5
Invité de passage
 
Inscription : mars 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 4
Points : 1
Points : 1
Arfff... J'ai envie de dire "évidemment"... C'est logique et factoche !
Merci PtiteA2 !

Par contre, dans cet exemple simpliste c'est cool, mais dans un formulaire plus complexe est-ce que c'est bien protocolaire et est-ce que ça ne va pas trop surcharger le code ?

Je ne pense pas avoir besoin des données (ici, le nom) ailleurs, j'aurai juste besoin de les injecter dans une BDD et donc de pouvoir revenir au formulaire en les réaffichant, mais il y en aura beaucoup plus que ça, avec des listes déroulantes etc...

Je vais voir ce que ça donne avec cette solution.
Je reste assez convaincu que je dois utiliser les sessions, mais malgré l'aide de kolodz ça ne marche pas... 'suis pourtant sûr de presque y être...

Je verrai vos éventuelles autres réponses dans une dizaine de jours, quand j'aurai la trace des lunettes de ski d'ici là bonne fin d'année.
BigYann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 20h28   #6
Membre Expert
 
Inscription : septembre 2010
Messages : 1 245
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 245
Points : 1 569
Points : 1 569
Si tu as beaucoup de champs à mettre dans tes variables de sessions tu as intérêt à les stocker dans un tableau pour éviter de trop polluer l'espace de nom de tes variables de sessions (qui perdurent tant que le navigateur client n'est pas fermé).

genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
if(isset($_POST['form']))
{
$_SESSION['form_client'] = isset($_SESSION['form_client'])? $_SESSION['form_client'] : array();
 
//passage par référence pour rendre le code ci-dessous plus facile à écrire
$_SESSION['form_client'] =& $form_client;
 
$form_client['nom'] = isset($_POST['nom'])? $_POST['nom'] : null;
$form_client['prenom'] = isset($_POST['prenom'])? $_POST['prenom'] : null;
$form_client['mail'] = isset($_POST['mail'])? $_POST['mail'] : null;
// etc...
 
// redirection pour éviter la re ssoumission du formulaire en cas de raffraichissement de la page
header("Location:".$_SERVER['PHP_SELF']);exit;
}
 
 
$input_client = isset($_SESSION['form_client'])? $_SESSION['form_client'] : null;
?>
<form action= "#" method = "post">
 
<input type = "text" name= "nom" value = "<?php echo isset($input_client['nom'])? $input_client['nom'] : ''?>" />
 
<input type = "text" name= "prenom" value = "<?php echo isset($input_client['prenom'])? $input_client['prenom'] : ''?>" />
 
<input type = "text" name= "mail" value = "<?php echo isset($input_client['mail'])? $input_client['mail'] : ''?>" />
 
<input type = "submit" name= "form" value = "envoyer" />
 
</form>
L'avantage de cette manière de faire c'est que tu n'as utilisé que $_SESSION['form_client'] pour tous tes champs sinon tu aurais eu une variable de session pour chaque champ avec beaucoup plus de risque de collision de variables avec d'autres scripts dans les autre pages.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 01h03   #7
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 441
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 441
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
On peut aussi faire de la POO...
Et stocker un objet formulaire qui contient de valeur par défaut. Puis les valeurs de l'utilisateur. (Un peu le cas avec le tableau dans un tableau)

Cordialement,
Patrick Kolodziejczyk.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 22h08   #8
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Citation:
Envoyé par BigYann Voir le message
Je voudrais donc afficher le résultat d'un premier envoi et pouvoir revenir au formulaire avec les saisies précédentes encore dans les champs de manière à n'en modifier qu'un ou deux pour la saisie suivante, etc...
Je suis pas sur d'avoir bien compris, mais si c'est oui, ceci devrait faire l'affaire:

Fichier dev.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
<?php
session_start();
?>
<html>
<head>
<title>Travaux code php</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body>
 
<?php
 
// Cette condition est prise en compte quand:
// * l'utilisateur arrive sur la page pour la première fois
// * si il a cliqué sur le lien "annuler" lors du récapitulatif
// * Si sa saisie a été complété et ajouté dans la base
// Elle réinitialise les variables en mémoire
if(!isset($_SESSION['form_values']) || $_GET['clear']=="yes") {
	$_SESSION['form_values'] = Array(step=>1, nom=>NULL, prenom=>NULL);
}
 
// Fonction qui affiche le formulaire en mode saisie ou dur, ça évite de réécrire ce formulaire, et empeche le paté dans les conditions qui vont suivre après
function displayForm($n=NULL, $val1=NULL, $val2=NULL) {
	switch($n) {
		default:
			$_SESSION['form_values']['step'] = "1"; // Etape 1 saisie
			echo '<form method="post" action="">
				<table width="300px">
				<tr>
				<td>Nom : </td>
				<td><input type="text" name="nom" size="40" value="'.$val1.'" /></td>
				</tr><tr>
				<tr>
				<td>Prénom : </td>
				<td><input type="text" name="prenom" size="40" value="'.$val2.'" /></td>
				</tr><tr>
				<td><input type="reset" name="effacer" value="Effacer" /></td>
				<td><input type="submit" name="ajout" value="Suivant »" /></td>
				</tr></table><input type="hidden" name="formSendedChecker" value="yes" />
				</form>';
		break;
 
		case 2:
			$_SESSION['form_values']['step'] = "2"; // Etape 2 récapitulatif des saisies
			echo '<u>Récapitulatif des saisies</u><br> '; 
			echo 'Nom: <b>'.$val1.'</b><br>
				  Prénom: <b>'.$val2.'</b>';
			echo '<br><br><a href="dev.php?clear=yes">- Annuler -</a>&nbsp;<a href="dev.php?modify=yes">- Modifier -</a>&nbsp;<a href="dev.php">- Insérer dans la base -</a>';
		break;
 
	}
 
}
 
 
if(isset($_POST['formSendedChecker'])) { // $formSendedChecker est l'input caché dans l'étape 1 du formulaire, ce qui suit ne s'éxécute donc que si on passe de l'étape 1 à 2
	$err = false;
	if(empty($_POST['nom'])) { $err = true; $errInfos = "Veuillez renseigner le champ nom<br>"; }
	if(empty($_POST['prenom'])) { $err = true; $errInfos .= "Veuillez renseigner le champ prénom"; }
	if($err==true) { // Si nom ou prénom est vide, on affiche l'indication d'une erreur et le formulaire
		echo "<span style='color: red;'>".$errInfos."</span>";
		displayForm("1", $_POST['nom'], $_POST['prenom']);
	}
	else { // Sinon, on stock les données saisies et on passe à l'étape 2
		$_SESSION['form_values']['nom'] = $_POST['nom'];
		$_SESSION['form_values']['prenom'] = $_POST['prenom'];
		displayForm("2", $_POST['nom'], $_POST['prenom']);
	}
}
 
else { // Si pas de $formSendedChecker
	if($_SESSION['form_values']['step']==1) { // Ici l'affichage initial de la page, donc le formulaire vide (étape 1)
		displayForm("1");
	}
	elseif($_SESSION['form_values']['step']==2) {  // A partir de l'étape 2
		if(isset($_GET['modify'])) { // Si l'utilisateur a demandé à modifier son formulaire, on retourne à l'étape 1
			displayForm("1",$_SESSION['form_values']['nom'], $_SESSION['form_values']['prenom']);
		}
		else {  // Sinon on passe à l'insertion dans la base
			echo "Insertion dans la base du nom: <b>".$_SESSION['form_values']['prenom']."</b> et du prénom: <b>".$_SESSION['form_values']['nom']."</b>";
			unset($_SESSION['form_values']); // Une fois insérées, les données du formulaire peuvent être effacées
		}
	}
}
?>
 
 
</body>
</html>
C'est codé rapidement, et c'est très basique, je vais surement me faire reprendre, mais tu as déjà une base de code qui fonctionne =)
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 21h33   #9
Invité de passage
 
Inscription : mars 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 4
Points : 1
Points : 1
Merci pourt toutes vos réponses !
Je n'ai pas tout solutionné, mais je devrais pouvoir me débrouiller avec vos explications.
BigYann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h03.


 
 
 
 
Partenaires

Hébergement Web