PHP : vider le _POST

Fermé
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012 - 14 mai 2011 à 17:54
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012 - 14 nov. 2011 à 11:40
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.

A voir également:

6 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
31 août 2011 à 13:51
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
2
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012
14 nov. 2011 à 11:37
très bonne idée le numéro de version, étonnant que je n'y ai pas pensé vu que j'utilise cette méthode au travail.
Je n'ai pas le temps de la tester mais je pense que ça fonctionnera avec. Merci bien
0
loveparade Messages postés 506 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 14 mai 2011 60
14 mai 2011 à 18:52
Montres comment tu les ajoutes en session, ca vient de la surement.
0
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
14 mai 2011 à 19:03
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 ...
0
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
Modifié par canarder le 14/05/2011 à 19:05
Si c'était juste vider _post (non testé, et ça ne serre à rien) :
$_POST = null; 
// OU 
unset($_POST)
0
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012
15 mai 2011 à 06:33
oui j'ai le signalement que ça va être ré-envoyé, mais ne connaissant pas trop je me suis dit qu'en vidant le post cela devrait ne pas me poser de problème, et pourtant si. j'avais testé aussi le unset sans succes
0
loveparade Messages postés 506 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 14 mai 2011 60
14 mai 2011 à 19:07
Ou alors tu remplaces les vars de sessions déjà existantes et mets a jour le contenu.(qui au final est le même).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012
Modifié par pitimick le 15/05/2011 à 06:36
methode qui s'appelle au debut de ma page php
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.
0
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
15 mai 2011 à 11:20
regarde sur le site du zéro
0
slifer Messages postés 48 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 3 septembre 2012 4
31 août 2011 à 13:22
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
0
pitimick Messages postés 20 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 2 février 2012
14 nov. 2011 à 11:40
Merci de ta réponse,
Ta méthode pourrait être une bonne chose aussi mais je souhaite éviter des rechargements de page. Mais il faudrait que je la teste quand même
0