PHP : vider le _POST
pitimick
Messages postés
24
Statut
Membre
-
pitimick Messages postés 24 Statut Membre -
pitimick Messages postés 24 Statut Membre -
Bonjour,
J'ai un petit souci technique en php, je m'explique:
je viens de faire un formulaire tout bête en html avec des balises input checkbox. le formulaire est envoyé en methode post, et le traitement se fait dans la page même qui contient le formulaire (un peu comme un postback). je recupere le contenu de _post et ajoute des choses en session. Mon souci vient du fait que dès que je recharge ma page (avec f5, ctrl +f5 ou le bouton actualiser), il continue a me rajouter des elements en session, comme si je venais de refaire un submit de mon formulaire.
j'ai testé : de vider le _post a la fin du traitement qui l'utilise en le mettant a null ou array() mais au rechargement il se remplit de nouveau
je n'ai pas testé : faire mon traitement dans un fichier autre (je pense que je n'aurai plus de souci mais ce n'est pas trop mon but d'avoir des fichiers distincts)
quelle est la notion que je n'ai pas comprise?
merci d'avance.
J'ai un petit souci technique en php, je m'explique:
je viens de faire un formulaire tout bête en html avec des balises input checkbox. le formulaire est envoyé en methode post, et le traitement se fait dans la page même qui contient le formulaire (un peu comme un postback). je recupere le contenu de _post et ajoute des choses en session. Mon souci vient du fait que dès que je recharge ma page (avec f5, ctrl +f5 ou le bouton actualiser), il continue a me rajouter des elements en session, comme si je venais de refaire un submit de mon formulaire.
j'ai testé : de vider le _post a la fin du traitement qui l'utilise en le mettant a null ou array() mais au rechargement il se remplit de nouveau
je n'ai pas testé : faire mon traitement dans un fichier autre (je pense que je n'aurai plus de souci mais ce n'est pas trop mon but d'avoir des fichiers distincts)
quelle est la notion que je n'ai pas comprise?
merci d'avance.
A voir également:
- PHP : vider le _POST
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
6 réponses
Bonjour,
Il est normal que vider le POST au niveau PHP ne fonctionne pas, car c'est le navigateur qui renvoie le POST quand tu fais F5.
J'aurais une solution assez simple à te proposer : rajouter un identifiant de formulaire (un champ hidden qui commence à 1 et que tu incrémentes par exemple).
Quand tu enregistres les données en session, tu enregistres aussi cet identifiant.
À chaque fois qu'un formulaire est chargé, tu incrémentes cet identifiant.
Quand tu feras F5 sur le navigateur, l'identifiant ne sera pas incrémenté, et tu pourras voir dans ton PHP qu'il a déjà été inséré en session. Du coup, tu ne refais pas la mise en session.
Xavier
Il est normal que vider le POST au niveau PHP ne fonctionne pas, car c'est le navigateur qui renvoie le POST quand tu fais F5.
J'aurais une solution assez simple à te proposer : rajouter un identifiant de formulaire (un champ hidden qui commence à 1 et que tu incrémentes par exemple).
Quand tu enregistres les données en session, tu enregistres aussi cet identifiant.
À chaque fois qu'un formulaire est chargé, tu incrémentes cet identifiant.
Quand tu feras F5 sur le navigateur, l'identifiant ne sera pas incrémenté, et tu pourras voir dans ton PHP qu'il a déjà été inséré en session. Du coup, tu ne refais pas la mise en session.
Xavier
Et tu as un signalement comme quoi tu va ré-envoyé les données ? Normal puisque c'est en post ... Pour éviter ça et rester en post, cherche du côté d'ajax ...
Ou alors tu remplaces les vars de sessions déjà existantes et mets a jour le contenu.(qui au final est le même).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
methode qui s'appelle au debut de ma page php
sinon bah je testerai l'ajax, je sais pas trop encore comment vu que j'en ai jamais fait mais on verra
merci pour vos réponses.
function Initialisation () { $compteur = 0; if ((isset($_SESSION['compteurOnglet'])) && (!empty($_SESSION['compteurOnglet']))) { $compteur = $_SESSION['compteurOnglet']; } if ((isset($_POST['listeCheckBox'])) && (!empty($_POST['listeCheckBox']))) { $aRajouterEnSessionOnglet = $_POST['toto']; unset ($_POST); foreach ($aRajouterEnSessionOnglet as $valeur) { $compteur++; $_SESSION['onglet#'.$compteur] = $valeur; $_SESSION['compteurOnglet'] = $compteur; } } } function AjouterOnglets () { foreach($_SESSION as $cle => $valeur) { if (strrpos($cle, "onglet#") == false) continue; $nomFichier = substr ($valeur, strrpos("/")); echo 'nom fichier : '.$nomFichier; $numero = substr ($cle, strrpos("onglet#")); $listeLienOnglet[] = AjouterCaseOnglet ($numero, $nomFichier); } }
sinon bah je testerai l'ajax, je sais pas trop encore comment vu que j'en ai jamais fait mais on verra
merci pour vos réponses.
tu peux opter pour une solution un peu professionel, c'est le MVC, tu sépare tes traitement et les affichages, par exemple
PageFormulaire.php (contient ton formulaire avec <form action="controleur.php"...>
on Submittant les donnée tu arrive sur la page controleur.php qui va effectuer tes traitement (insertion dans BDD ou autre), à la fin de tes traitement tu fais une redirection vers la page que d'arrivé qui va afficher les donnée (header("location:PageArrivee.php");).
les avantage :
- plus de post dans la requete de PageArrivee.php car le poste se trouvais déja dans controleur.php.
- tes traitement sont reuni sur une seule page (d'où son nom CONTROLEUR), c'est cette page qui effectue tes traitement et rederige apres
- tes page d'arrivé sont plus lisible puisqu'il ne contient que les donnée a afficher de la base,(aucun traitement pour salir la page)
voila j'espère que jété clair
PageFormulaire.php (contient ton formulaire avec <form action="controleur.php"...>
on Submittant les donnée tu arrive sur la page controleur.php qui va effectuer tes traitement (insertion dans BDD ou autre), à la fin de tes traitement tu fais une redirection vers la page que d'arrivé qui va afficher les donnée (header("location:PageArrivee.php");).
les avantage :
- plus de post dans la requete de PageArrivee.php car le poste se trouvais déja dans controleur.php.
- tes traitement sont reuni sur une seule page (d'où son nom CONTROLEUR), c'est cette page qui effectue tes traitement et rederige apres
- tes page d'arrivé sont plus lisible puisqu'il ne contient que les donnée a afficher de la base,(aucun traitement pour salir la page)
voila j'espère que jété clair
Je n'ai pas le temps de la tester mais je pense que ça fonctionnera avec. Merci bien