Comment éviter qu'un formulaire se vide si on revient ? [Résolu] [PHP] - PHP - Programmation
Marsh Posté le 18-03-2006 à 10:31:47
au lieu de proposer un retour en arrière (chose que je trouve très irritante sur un site) réaffiche directement le formulaire avec les données entrée à l'aide de la variable $_POST
et tu insère si nécéssaire un petit message d'erreur...
Marsh Posté le 18-03-2006 à 11:26:06
Tu réaffiche la même page, avec les cases déjà complétées avec les variables POST et les titre de champs en rouge et un message d invite.
genre:
Code :
|
Une approche complémentaire est d utiliser javascript:
Code :
|
qui affiche un message d erreur javascript (un ptit popup) si le titre est vide, sinon soumet le formulaire.
Marsh Posté le 18-03-2006 à 16:19:05
Je suis plutôt d'accord avec vous dans le cadre de mon premier exemple mais comment expliquez-vous le 2ème exemple ?
Sur tous les sites, le navigateur (FF ou IE c'est idem) se souvient de ce qu'on a commencé à taper ; mais sur mon site, ça vide.
Marsh Posté le 18-03-2006 à 16:29:33
ca se vide sur le tiens parceque tu as changé de page. Ce que tu peux faire aussi cest mettre un lien vers history.back(); qui gardera le formulaire. (revient au meme que de cliquer sur precedent)
Marsh Posté le 18-03-2006 à 16:42:40
Ben justement sur ma page d'erreur, j'ai un lien history.back(); mais ça fait pareil qu'on clique dessus ou sur le bouton Back du navigateur.
Mais faites comme si je n'avais pas donné le 1er exemple et concentrez-vous s'il vous plait sur le 2ème.
Marsh Posté le 18-03-2006 à 16:43:36
xman a écrit : Ben justement sur ma page d'erreur, j'ai un lien history.back(); mais ça fait pareil qu'on clique dessus ou sur le bouton Back du navigateur. |
Marsh Posté le 18-03-2006 à 20:26:58
En ce qui me concerne j'utilise les sessions pour gérer ça.
Lors de la validation du formulaire, j'ai une page de verification des champs (que l'adresse email soit bonne, que les cases soient remplies, que le numéro de tel fasse bien 10 chiffres etc...).
A la fin de mes tests, s'il y a 1 ou plusieurs erreurs, je stocke mon $_POST dans une session et je redirige vers ma page de formulaire. Sur cette derniere j'ai une portion de code qui detecte la session d'erreur et qui rempli donc les champs en conséquence.
Marsh Posté le 18-03-2006 à 20:32:08
Je pense que c'est la meilleure solution pour mon 1er exemple (j'étais justement en train d'envisager de le faire)
MAIS ça ne répond toujours pas à mon 2ème cas.
Marsh Posté le 18-03-2006 à 21:27:12
Aucune idée, j'ai été voir, on dirait que la page se recharge quand on fait precedent + suivant.
Edit : En même temps ... quelle idée d'aller faire precedent pendant qu'on tape un message
Marsh Posté le 18-03-2006 à 21:34:44
Ben, sur ma souris, y'a des boutons latéraux pour faire "Page précédente" ou "Page suivante" et des fois je clique dessus sans faire exprès.
Marsh Posté le 18-03-2006 à 21:35:28
Aucune idée en tout cas, va peut être voir du coté des balise meta de cache
Marsh Posté le 18-03-2006 à 22:52:11
J'ai trouvé une piste.
Dans mon code j'inclue veriflogin.php (pour vérifier que l'utilisateur est connecté, sinon, je le redirige vers la page de login au lieu de lui permettre de poster) ainsi que banner.php (pour afficher l'entête du forum et un lien pour se déconnecter si l'on est connecté).
Or, ces deux fichiers contiennent l'instruction session_start();
Si supprime l'insertion de ces fichiers (chose que je ne veux pas faire mais que j'ai fait, juste pour tester), alors mon formulaire n'est plus effacé...
EDIT : et si je vire l'inclusion de ces fichiers MAIS que je mets juste un session_start(); au début de mon code, ça vide aussi le formulaire.
Donc c'est session_start(); qui vide mon formulaire.
Il faut donc que je trouve un moyen pour que session_start(); ne vide pas ou bien que je me passe de session_start(); sur cette page mais là ça va être chaud.
Marsh Posté le 19-03-2006 à 03:29:47
Ouf ! J'ai trouvé ! (en partie grace à Yell qui m'a fait chercher des trucs avec "cache" comme mot clé et d'autre part avec le fait que j'ai trouvé que ça venait de la session)
Il faut mettre la ligne suivante au tout début de mon fichier contenant le formulaire :
session_cache_limiter('private_no_expire');
Marsh Posté le 22-03-2006 à 19:58:46
Finalement, il semble qu'il vaut mieux la ligne suivante :
session_cache_limiter('private, must-revalidate');
Marsh Posté le 18-03-2006 à 06:39:56
EDIT : résolu grâce à session_cache_limiter('private, must-revalidate'); à mettre au tout début (avant session_start(); qui était la 1ère ligne du premier fichier inclus)
Bonjour,
Je suis en train de programmer un forum (il fonctionne déjà) mais j'ai un petit problème d'ordre pratique...
Prenons un cas concret. Imaginons qu'on veuille créer un nouveau sujet.
Il faut saisir un titre et un message dans un formulaire.
Si un de ces deux éléments est vide, on affiche une page d'erreur invitant l'utilisateur à cliquer sur le bouton "Page précédente" de son navigateur et à compléter son formulaire.
Mon problème est le suivant : quand je clique sur "Page précédente", mon formulaire est devenu vide !
Très frustrant pour un membre qui aurait tapé un long message et aurait bêtement oublié de taper un titre.
Cas encore plus simple : je tape un message puis, sans l'envoyer, je clique sur "Page précédente" puis sur "Page suivante". Là encore mon formulaire s'est vidé.
Je précise que si on fait ça sur Hfr ou à peu près n'importe quel autre forum le contenu du formulaire n'est pas vidé, donc il y a bien un moyen (mais j'ai beau étudier le code source des pages générées par ces forums, je ne vois pas ce qui fait la différence).
Si ça peut vous aider à y voir plus clair, voici le code de la page de mon formulaire :
Et voici le code appelé pour gérer les données postées dans le formulaire :
Et si vous voulez voir par vous-même ce que ça fait sur mon forum, c'est ici (mais faut s'inscrire ) :
http://xmanvip.free.fr/foruxm
Message édité par xman le 22-03-2006 à 19:59:27