PHP : vider le _POST

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.

A voir également:

6 réponses

Reivax962 Messages postés 3742 Statut Membre 1 011
 
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 24 Statut Membre
 
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   Statut Membre Dernière intervention   60
 
Montres comment tu les ajoutes en session, ca vient de la surement.
0
canarder Messages postés 2034 Statut Membre 355
 
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 2034 Statut Membre 355
 
Si c'était juste vider _post (non testé, et ça ne serre à rien) :
$_POST = null; 
// OU 
unset($_POST)
0
pitimick Messages postés 24 Statut Membre
 
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   Statut Membre Dernière intervention   60
 
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 24 Statut Membre
 
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 2034 Statut Membre 355
 
regarde sur le site du zéro
0
slifer Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   4
 
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 24 Statut Membre
 
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