Salut à tous

Comment fait-on pour ne pas renvoyer automatiquement un formulaire lors du rechargement de la page ?

Merci
Bonjour à toi Smiley smile

C'est une très bonne question Smiley jap

La manière la plus simple me semble de rediriger le visiteur vers une nouvelle page au lieu de rester sur la même. C'est la manière la plus simple, mais elle n'est pas parfaite car il reste l'historique du navigateur et les boutons suivant/précédent qui vont avec. Par ailleurs, il n'est pas forcément toujours possible de renvoyer l'utilisateur sur une autre page, ça dépend du type de formulaire et de son emplacement par rapport au parcours de navigation du site, etc.

Sinon, après une petite recherche dans la langue de Mr Bean, je suis tombé là-dessus : "redirect after POST", et ça contient pas mal d'explications théoriques sur le problème du "double envoi" de données via HTTP POST. Plutôt intéressant. La solution développée est de traiter les données envoyées via POST, puis de rediriger l'utilisateur avec un feedback utilisant GET. C'est pas con, mais ça date, il y a peut-être mieux et plus simple à l'heure actuelle. À tester si la solution de ce problème est un enjeu capital pour toi Smiley smile
salut,
bin beaucoup plus simplement, en passant par les sessions.
Un petit exemple tout con et minimaliste

session_start();

if (!empty($_POST)) {
	$_SESSION["formulaire_envoye"] = $_POST;
	header("Location: ".$_SERVER["PHP_SELF"]);
	exit;
}

if (isset($_SESSION["formulaire_envoye"])) {
	$_POST = $_SESSION["formulaire_envoye"];
	unset($_SESSION["formulaire_envoye"]);
}

Après si le formulaire contiendra des fichiers, il faudra créer un variable session pour $_FILES.
S'il y a aussi des paramètres dans l'URL, il faudra penser à les ajouter dans la redirection.

EDIT: erreur de nom de variable après un mauvais copier/coller.
Modifié par Zelalsan (15 Sep 2014 - 08:29)
Rediriger le visiteur après avoir traité les données est la solution ultime. Il est impossible de renvoyer automatiquement le formulaire en procédant de cette manière.

Par contre, stocker tout le formulaire dans la session et le traiter sur la 2ème page, c'est pas très malin, et la deuxième page ne serait pas un point d'entrée très pratique; on peut s'en passer en général. Par contre la session sera utile pour stocker un message de retour.


if (isset($_POST['champ1'], $_POST['champ2'], $_POST['champ3'])) {
// Traitement des données: mise à jour de la base, etc.
$_SESSION['resultat'] = 'Votre requête a bien été enregistrée, merci !';
header("Location:{$_SERVER['REQUEST_URI']}");
exit();
}


if (isset($_SESSION['resultat'])) echo "<p>{$_SESSION['resultat']}</p>";
...
echo "<form ......... ";
...
}

Modifié par QuentinC (14 Sep 2014 - 20:40)
Il n'était pas question de traiter le formulaire sur une 2ème page mais bien sur la même. Dans ce cas autant spécifier la deuxième page comme étant le fichier qui va traiter le formulaire dans l'attribut "action".
Avec l'exemple que j'ai donné, le traitement se fait sur la même page et le formulaire n'est copié que momentanément (il y a un unset de la variable session utilisée, une fois tout fini).
Merci pour vos réponses !

comme je suis sur WordPress, je n'est pas de session Start, et je ne connais pas la page actuel,

alors j'ai fais appel au varaiable globale HTTP REFERER et PHP SELF pour le nom du fichier.

header("Location: ".$_SERVER['HTTP_REFERER']."".$_SERVER['PHP_SELF']."");


Et ça marche niquel, ma page est recharger une fois avec le submit, et le navigateur ne me propose plus le renvoi automatique.

Merci
Modifié par JENCAL (15 Sep 2014 - 09:30)