Envois du formulaire plusieurs fois

Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié le 14 juil. 2018 à 23:51
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 16 juil. 2018 à 21:18
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
15 juil. 2018 à 10:21
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 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
15 juil. 2018 à 12:31
Désolé, oui en effet c’est exactement ça !
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
15 juil. 2018 à 13:47
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 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
16 juil. 2018 à 13:54
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 juil. 2018 à 15:37
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 juil. 2018 à 21:18
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
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