8710 sujets

Développement web côté serveur, CMS

Salut à vous,

J'ai un formulaire sur une page PHP.
Après l'avoir soumis, le traitement se faire sur la même page (avant affichage de l'HTML).
En fonction du traitement, j'affiche un message en vert quand tout est OK ou un message en rouge quand tout n'est pas OK.

Ce que je souhaite :
- c'est ne pas re-soumettre le formulaire en effectuant un F5 (= rafraîchissement de la page) !
- mais quand même être capable d'afficher un message en vert/rouge après soumission du formulaire (en fonction du traitement)

Faire une redirection après traitement ? OK mais il faut que j'affiche mon message en vert ou en rouge quoi qu'il arrive...
Salut j'ai eu le meme problème, ce que j'ai fait c'est une action sur une autre page.
en fin de traitement, cela me renvoie sur la page d'origine avec en plus une variable dans l'url qui me dit que c'est ok. en fonction de cette variable j'affiche (votre envoie est pris en compte ou pas).
Je ne sais pas a quoi sert ton formulaire mais en fonction tu pourras peut etre adapter ma solution.
Apres tu peux peut etre faire un renvoie sur la page courante mais avec une variable en plus.
Modifié par Lemonstr (13 Mar 2013 - 13:13)
>Apres tu peux peut etre faire un renvoie sur la page courante mais avec une variable en plus.

Je n'ai pas compris cette phrase... une variable en plus ?

Donc dans ton cas, si la personne fait F5, le message continuera toujours à s'afficher ?
Comment faire pour qu'il ne s'affiche plus après un F5 si ce paramètre est toujours présent dans l'URL ?

Mon objectif est :
- de ne plus re-soumettre le formulaire après un F5
- et ne plus afficher le message vert/rouge après un F5
Modérateur
Bonjour,

Rapidement, je vois 3 solutions possibles, et j'en ai aussi une autre en tête, mais je n'ai pas le temps de tester si c'est techniquement possible :

Solution A
1. Soumettre le formulaire en AJAX

Solution B
1. Soumettre le formulaire à la page en cours
2. Valider et traiter les données
3. Stocker le message de confirmation dans une variable de session
4. Faire une redirection vers la page en cours en utilisant la variable de session pour construire le code HTML afin d'afficher le message de confirmation.
5. Effacer la variable de session juste avant de délivrer la page finale à l'utilisateur.
6. Si l'utilisateur fait Refresh, ça ne resoumettra pas le formulaire et la variable de session sera vide.

Solution C
1. Soumettre le formulaire à la page en cours
2. Valider et traiter les données
3. Faire une redirection vers la page en cours avec un paramètre supplémentaire dans l'URL afin d'afficher le message de confirmation à l'utilisateur
4. Ignorer le fait que le message sera toujours présent en cas de Refresh.
La solution B est exactement le comportement que je souhaite avoir !

Mais est-ce que concrètement, un développeur web programme ce genre de comportement ? ou c'est déjà considéré comme du chipotage ?
Modérateur
Imagine un instant qu'au lieu de rester dans la même page, l'utilisateur soit redirigé complètement ailleurs, sur une page qui contient un texte de confirmation et de remerciement. Si l'utilisateur rafraîchit cette page, c'est tout à fait naturel que le message de confirmation et de remerciement réapparaisse.

C'est le même principe qui devrait s'appliquer lorsqu'on redirige l'utilisateur sur la même page avec un message de confirmation. À l'écran, il voit un message de confirmation. Il décide de rafraîchir la page puisque pour une raison ou une autre, des éléments ne se sont pas chargés correctement. C'est tout à fait correct qu'il voit encore le message de confirmation. Il a rafraîchit la page, il n'a pas demandé de quitter ou de recommencer du début.

Bref, je trouve la solution C tout à fait adéquate.
Modifié par Tony Monast (13 Mar 2013 - 15:23)
a écrit :
Imagine un instant qu'au lieu de rester dans la même page, l'utilisateur soit redirigé complètement ailleurs, sur une page qui contient un texte de confirmation et de remerciement. (...) C'est le même principe qui devrait s'appliquer lorsqu'on redirige l'utilisateur sur la même page avec un message de confirmation.

Donc redirection en cas de succès dans tous les cas de figure ? (qu'on soumette sur la même page ou sur une nouvelle page) ?

a écrit :
Si l'utilisateur rafraîchit cette page, c'est tout à fait naturel que le message de confirmation et de remerciement réapparaisse.

Sans doute, je veux bien te croire Smiley cligne
Modérateur
C'est ça. Il faut faire une redirection en cas de succès pour empêcher que F5 re-soumettre le formulaire, soit vers une autre page, soit dans la page en cours (ex : page-en-cours.php?Succes=1)
Modérateur
C'était de rediriger vers la page en cours avec un paramètre dans l'url, et de retirer ce paramètre au chargement de la page via du simple Javascript ou le HTML5 history API. D'après ce que je vois du démo, ça ne semble pas impossible. L'url change dans la barre d'adresse, ne provoque pas de redirection et en faisant Rafraîchir, ça l'appel la nouvelle adresse qui se trouve dans la barre d'adresse.

Pour les raisons évoquées, je resterais tout de même avec la solution C, mais c'est quand même intéressant le HTML5 history API.
Juste pour ton dernier point Tony, attention, ces fonctionnalités ne sont pas implémentés dans tous les navigateurs !

La solution B ou C sont très bien, car la solution A est intrusive (comment gérer le formulaire sans javascript), et la solution D ne fonctionne pas partout (et est intrusive aussi).