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 07/09/2007, 16h20   #1
Nouveau Membre du Club
 
Homme Benoit
Développeur Web
Inscription : janvier 2006
Messages : 69
Détails du profil
Informations personnelles :
Nom : Homme Benoit
Âge : 34
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2006
Messages : 69
Points : 30
Points : 30
Par défaut Perte de données sur retour formulaire

Bonjour à tous,

Je voudrais vous soumettre un problème génant mais surtout très étrange, que je rencontre pour la première fois.

J'ai un forlumaire à renseigner avec certains champs obligatoires. La validation de celui-ci se fait sur une autre page.

Lorsque je ne renseigne pas tous les champs obligatoires, la page de validation me l'indique. Sur celle-ci j'ai un bouton Retour qui permet de revenir au formulaire.

Code :
<input type="button" value="Retour" onClick="window.history.back();">
Lorsque je clique sur le bouton Retour, le formulaire est intégralement effacé et ca pose problème. Idem avec la fonction retour du navigateur (normal puisque le code du bouton retour correspond à la fonction retour du navigateur...)

J'ai déjà fait des dizaines de formulaires, avec validation PHP ou ASP et je n'ai jamais rencontré ce cas de figure... D'habitude, le retour sur le formulaire ne pose aucun problème. Je ne comprend pas.

Est-ce que c'est déjà arrivé à l'un d'entre vous et comment cela peut il se résoudre ? Je précise que je ne veux pas utiliser le javascript pour valider les champs.

Je me demande si le problème ne vient pas de cette ligne de code qui se trouve sur la ligne 1 du formulaire, mais qui est indispensable puisqu'il s'agit d'un formulaire admin.

Lorsque j'enlève cette ligne, le retour sur le formulaire semble ne plus poser aucun problème...

Merci de votre aide.
Benzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 12h46   #2
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 43
Points : 34
Points : 34
Salut à toi,
Premièrement je tiens à te signaler que tout mes formulaire ne sont vérifiés que sur la même page je trouve ça plus pratique et que je n'ai jamais eu se genre de problème.
Secondement si le session_start suprimme les champs de ton formulaire je ne sais pas non plus pourquoi, maitenant tu n'a pas précisé le mode d'envoi du formulaire Get, Post mais si il y a une solution facile, celle de te remettre les variables reçues dans la page de validation dans tes champs du formulaire, à l'aide de variables sessions vu que tu en utilise et en fesant un header("page de formulaire") ou en stockant ces variables dans l'adresse, et de traiter cette adresse ou ces variables sessions au début de ta page de formulaire.

Je résume :
-Dans ta condition "$formu=false;" (le formulaire est mal rempli) tu rajoute une ligne "$_SESSION[$formu]=$_POST[];"
et tu remplace le "history.back();" par un "<? header("formulaire.php"); ?>"
- dans ta page de formulaire au début tu rajoute pour chaque élement de ton formulaire dans value= ou default= tu ecrit par exemple pour le pseudo d'une personne:
Code :
1
2
 
<input type="text" name="pseudo" value="<? If(isset($_SESSION[pseudo])){echo $_SESSION[pseudo];}; ?>"/>
Euh dsl mais j'éspère que j'ai été clair c'est la première fois que j'aide sur un forum ^^
kaari kosaku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2007, 13h55   #3
Membre à l'essai
 
Inscription : novembre 2005
Messages : 122
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 122
Points : 21
Points : 21
J'ai exactement le même problème.
J'avais posté un topic il y a quelques semaines...sans réponses.
Ce que je fais: j'enregistre tout dans des variables de session et quand l'utilisateur fait un history.back, je remplis le formulaire grace au $_session. Si quelqu'un a mieux, je suis preneur.
Hypnocrate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 09h59   #4
Membre à l'essai
 
Inscription : janvier 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 47
Points : 22
Points : 22
idem,je ne trouve pas ca logique de devoir utiliser les sessions
Kapha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 16h31   #5
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Bonjour,

+1 pour kaari kosaku au sujet du traitement du formulaire qui se trouve sur la même page que le formulaire. En cas d'erreur sur celui-ci celà évite une requête supplémentaire au serveur.

Par contre je ne vois pas l'utilité de la session (même si je le faisais avant ). Actuellement j'utilise directement $_POST dans le 'value' des champs.
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 13h43   #6
Candidat au titre de Membre du Club
 
Inscription : septembre 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 36
Points : 10
Points : 10
Par défaut recup données formulaire

bonjour,
je ne traite qu'en PHP et j'ai le meme problème, cela fait un mois que je "poste" partout.
voila le début de la résolution pour un formulaire de plusieurs pages. lorsque cela sera résolu je le mettrai en ligne pour tous.
pour les listes déroulantes et les radio boutons je n'ai pas encore résolu le problème de l'affichage de la ligne saisie.
ce que je fais est certainement lourd, mais j'attends que l'on m'éclaire - critiques bienvenues (si constructives ).
J'ai ouvert une session dans la page d'appel du formulaire.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<?php 
//  ouverture d'une nouvelle session
		session_start();
		session_unset() ;  // suppression des variables de session (suis maso !)
		$_SESSION['flag'] = 7 ;   // je déclare la session
		$flag=$_POST['flag'];
		$_SESSION['flag2'] = 0;  // je ne suis pas passé page 2
		$_SESSION[$tablerreur];
 
		$tablerreur =""; // raz table erreur
?>
débutant je ne maitrise pas encore les variables, donc s'il y a du 'trop' merci de me le dire.
page 1 je vérifie si la session est ouverte, puis je vérifies si je viens de la page de controle (car si je viens de la page 2 -de controle- c'est que j'ai eu une ou des erreurs)
Code :
1
2
3
4
5
6
7
8
9
10
 
if($_SESSION['flag'] = 7) 
		{
		// je viens de la page d'appel et ma session est déjà déclarée (ouverte)
		// je dois passer à la saisie des champs
		// mais je peux venir de la page de controle 
		include '../environnement/_initvariable.php'; // je suis a mon premier passage et j'initialise les variables
		if($_SESSION['flag2'] = 9 ) {  // je viens  de la page 2 page de controle 
			echo $tablerreur;  $tablerreur = "";  // j'imprime les erreurs											}
		}
en cas d'erreur(s) j'imprime la table erreur, puis je passe à la saisie des champs.
pour les champs texte de la page 1
Code :
1
2
 
<input type="text" name="nomp" maxlength="30" value="<?php echo $_SESSION['nomp'];?>" >
ainsi cela permet le réaffichage du champ saisi. pr contre j'ai cette instruction affichée dans le champ ???
mais cela fonctionne ! je ne trouve cela pas beau, et je cherche comment ne pas le voir la première fois.
page 2
dans cette page de controle, si j'ai une erreur je la stocke dans la table erreur :
Code :
1
2
3
4
5
6
7
8
9
 
// nom
		$_REQUEST['nomp'] = trim($_REQUEST['nomp']); // supp espaces // verif du nom du participant
		if (empty($_REQUEST['nomp'])) {
		$ernomp= 'vous avez oublié votre nom de participant <br> ';
		$tablerreur= $tablerreur .$ernomp ;
		 }
		$nomp = addslashes($_POST['nomp']); // le nom existe, suppression des /
		$_SESSION['nomp']=$nomp;	// stockage  pour la session
et en fin de page, après tous les controles, si la table n'est pas "" je réaffiche la page 1 pour ressaisir les infos.
Code :
1
2
3
4
5
6
7
8
9
10
11
 
			if ($tablerreur == "") {
			mysql_close(); 
								}
								else { 
								$_SESSION[$tablerreur]=$tablerreur;
								include ('identite.php');  //  page de saisie
								//header("Location: identite1a.php", TRUE, 307);  // abandonné ne permet pas l'affichage des erreurs
								//echo "vous avez des erreurs - vérifiez ";
								exit;
								}
je n'utilise plus le header, car il efface tout et n'affiche pas les erreurs, et l'include correspond a la page de saisie.
cela fonctionne.
je souhaiterais savoir comment ne pas voir le code php dans le champ.
et 2/ savoir comment faire pour une liste.
@ +
webasso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2007, 15h36   #7
Candidat au titre de Membre du Club
 
Inscription : septembre 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 36
Points : 10
Points : 10
pour ceux qui sont intéressés :
pour eviter de voir le code dans le champ, j'ai déclaré la variable notée dans le champ, en $_SESSION["nomp"]="";
et le code a disparu du champ. cela fonctionne bien.
pour réafficher une liste déroulante, basée sur un fichier.txt, je n'ai pas encore résolu le problème.
@+
webasso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2008, 12h10   #8
Invité de passage
 
Inscription : juillet 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 11
Points : 3
Points : 3
Par défaut Vrai solution

Bonjour,

La vrai solution consiste à modifier le fichier de configuration php.ini et mettre session.cache_limiter = private au lieu de nocache ( vous pouvez mettre aussi public mais je garantis rien, lisez la doc officiel) !!
bbsebb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h44.


 
 
 
 
Partenaires

Hébergement Web