Envois du formulaire plusieurs fois

Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je sollicite votre aide afin de ne pas envoyer plusieurs fois le $_POST.
En effet, après l'actualisation de ma page, je suis invité à renvoyer l'enregistrement.
Pouvez-vous m'aider svp ?

<div style="background: #EFEFEF; padding: 30px 0"><div class="body-cont" align="center">
<h4 class="txt_majuscule" style="margin-bottom: 20px;"><?php echo $NEWSLETTER_TITRE; ?></h4>

<?php
$FR_Email 	= NULL;
$MSG_OK 	= NULL;
$MSG_NO 	= NULL;
$affiche 	= true;
 
if(isset($_POST['Envoyer'])){

foreach($_POST as $var=>$val){if(!is_array($val)){$$var = strip_tags($val);}else{while(list($arvar,$arval) = each($val)){$$var[$arvar] = strip_tags($arval);}}}
 
if($MSG_NO==""){
 $res = $pdo->query("SELECT Email FROM tb_newsletter_adresse WHERE Email='$FR_Email';"); $data = $res->fetch(PDO::FETCH_ASSOC);
 if($data!=0) {$MSG_NO.= $NEWSLETTER_MSG_NO;}
 
 if($data==0)
 {
 $FR_Source = PAGE;
 $FR_Pays = $PAYS_ISO_2;
 $req_fr = $pdo->prepare ("INSERT INTO tb_newsletter_adresse (Email, Source, Pays) VALUES (:FR_Email, :FR_Source, :FR_Pays)");
 $req_fr ->execute(array("FR_Email"=>$FR_Email, "FR_Source"=>$FR_Source, "FR_Pays"=>$FR_Pays));
 $MSG_OK.= $NEWSLETTER_MSG_OK;
 $affiche = false;
 }
}
}
?>
<?php if ($affiche == true) { ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" name="Form1" autocomplete="off">
<div class="input-group mb-3 col-md-6">
<input type="email" class="form-control" placeholder="Veuillez entrez votre adresse mail" id="FR_Email" name="FR_Email" value="<?php echo $FR_Email; ?>" required >
<div class="input-group-append"><button class="btn btn-primary" type="submit" name="Envoyer"><i class="fa fa-paper-plane"></i></button></div>
</div>
</form>

<small class="form-text text-muted"><?php echo $NEWSLETTER_TEXTE; ?></small>

<?php } ?>
<?php if($MSG_OK){ ?><div class="div_20"></div><div class="alert alert-primary col-md-5" role="alert"><?php echo $MSG_OK; }?></div>
<?php if($MSG_NO){ ?><div class="div_20"></div><div class="alert alert-danger col-md-5" role="alert"><?php echo $MSG_NO; ?></div>
<?php } ?>
	
</div></div>


3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
que veux-tu dire par "envoyer le $_POST"?
Veux-tu dire que, quand l'utilisateur demande au navigateur de rafraîchir la page, le navigateur demande à l'utilisateur si il veut renvoyer les informations?
pourrais-tu expliquer ce que tu essaies réellement de réaliser?
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Désolé, oui en effet c’est exactement ça !
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
 
pourquoi l'utilisateur rafraîchit-il la page? pourrais-tu expliquer ce que tu essaies réellement de réaliser?
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Même si je met une clé unique dans ma table, certains utilisateurs rafraîchissent le formulaire pour tenter encore une fois d'enregistrer leurs données... les logs se bourrent de la même adresse IP et saturent donc mon serveur...
Je souhaiterais que lorsque l'utilisateur poste dans un formulaire, le rafraîchissement ne fonctionne que pour rafraîchir la page et non pas un renvoi du formulaire.
Ici j'ai donné un exemple de juste une adresse mail (newsletter) mais sur mes autres formulaires ça coince un peu plus... les jeux par exemples.
Pas plus tard que la semaine dernière j'ai une 315 entrées d'une même adresse IP pour tenter de gagner a un jeu...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Personnellement... pour éviter ce genre de souci.. je n'utilise plus le submit des formulaire.
Je code tout en ajax.

Lorsqu'on ne peut pas faire de l'ajax, on peut, à la limite, utiliser un tocken.
Exemple :
https://arjunphp.com/prevent-multiple-form-submissions-php/

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
bonjour, quel est l'utilité d'un token unique? un booléen ne suffit-il pas pour autoriser de répondre une seule fois au formulaire?
0
Utilisateur anonyme
 
Bonjour,

vous pouvez aussi faire une redirection.

Si le formulaire est valide, au lieu d'afficher directement la page, vous rafraichissez vous-même la page.

       header( 'Location: http://www.example.com/page-formulaire.php?message=ok' );
0