Empêcher le double envois des données d'un formulaire?
Résolu
Zick__barrimor
Messages postés
62
Date d'inscription
Statut
Membre
Dernière intervention
-
Zick__barrimor Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
Zick__barrimor Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous!
Aujourd'hui je m'adresse a vous car je me trouve dans l'embarras.
Les utilisateurs de mon site doivent remplir un formulaire de contact, lequel m'est envoyé par mail. Jusque là il n'y a aucun problème.
En revanche si l'utilisateur s'amuse a rafraichir la page, ma boite mail se retrouve rapidement inondée. Mais j'y ai pensé!
J'ai modifié un code que j'ai trouvé sur le net, mais malheureusement le mail continue de s'envoyer meme après un refresh..
$reload = 0;
$reload = $_SESSION[$reload];
if($reload > 0) {
} else {
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e){
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
}
$_SESSION[$reload]++;
Si quelqu'un a l’amabilité de m'aider...!
Merci!
Aujourd'hui je m'adresse a vous car je me trouve dans l'embarras.
Les utilisateurs de mon site doivent remplir un formulaire de contact, lequel m'est envoyé par mail. Jusque là il n'y a aucun problème.
En revanche si l'utilisateur s'amuse a rafraichir la page, ma boite mail se retrouve rapidement inondée. Mais j'y ai pensé!
J'ai modifié un code que j'ai trouvé sur le net, mais malheureusement le mail continue de s'envoyer meme après un refresh..
$reload = 0;
$reload = $_SESSION[$reload];
if($reload > 0) {
} else {
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e){
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
}
$_SESSION[$reload]++;
Si quelqu'un a l’amabilité de m'aider...!
Merci!
A voir également:
- Empêcher le double envois des données d'un formulaire?
- Whatsapp formulaire opposition - Guide
- Fuite données maif - Guide
- Double ecran - Guide
- Whatsapp double sim - Guide
- Formulaire de réclamation facebook - Guide
4 réponses
Je te propose 2 solutions non exclusives :
- Ajout d'un input Hidden contenant une valeurqui est aussi renseignée dans la session, comme ça à la première validation du retire/change cette valeur et comme les valeurs ne concordent pas, tu refuse le formulaire.
- Après l'envoi du message, tu rediriges vars une page avec header("location ...?Success=true") par exemple.
- Ajout d'un input Hidden contenant une valeurqui est aussi renseignée dans la session, comme ça à la première validation du retire/change cette valeur et comme les valeurs ne concordent pas, tu refuse le formulaire.
- Après l'envoi du message, tu rediriges vars une page avec header("location ...?Success=true") par exemple.
d'ailleurs dans tous les cas, avec ou sans redirection rien n'empeche de revenir sur la page précédente et re-renvoyer le mail
Alors j'ai compris ou est le soucis:
$reload = 0;
$reload = $_SESSION[$reload];
je defeinis ici reload sur 0, pour lui attribuer une autre valeur plus tard. Le problème que ça pose, c'est que si la page est rafraîchie, reload se remet a nouveau a 0...
Donc il faudrait soit fractionner le code en deux page, soit verifier avant de le modifier si il n'a pas déjà une valeur.
Fractionner en deux pages je n'ai pas réussi jusque là (les variables ne communiquent visiblement pas d'une page a l'autre)
et le if je viens d'y penser en saisissant ma réponse, a voir.
$reload = 0;
$reload = $_SESSION[$reload];
je defeinis ici reload sur 0, pour lui attribuer une autre valeur plus tard. Le problème que ça pose, c'est que si la page est rafraîchie, reload se remet a nouveau a 0...
Donc il faudrait soit fractionner le code en deux page, soit verifier avant de le modifier si il n'a pas déjà une valeur.
Fractionner en deux pages je n'ai pas réussi jusque là (les variables ne communiquent visiblement pas d'une page a l'autre)
et le if je viens d'y penser en saisissant ma réponse, a voir.
if ($reload !== 0) {
echo 'la valeur est '.$reload;
} else {
echo 'valeur placée sur 0';
$reload = $_SESSION['0'];
}
if ($reload < 0) {
echo 'Mail sent!';
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e){
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
} else {
echo 'Mail not sent!';
}
$reload = $_SESSION['0']++;
echo $reload;
Visiblement même comme ça ça ne fonctionne pas..
echo 'la valeur est '.$reload;
} else {
echo 'valeur placée sur 0';
$reload = $_SESSION['0'];
}
if ($reload < 0) {
echo 'Mail sent!';
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e){
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
} else {
echo 'Mail not sent!';
}
$reload = $_SESSION['0']++;
echo $reload;
Visiblement même comme ça ça ne fonctionne pas..
J'ai étudié l'usage du $_SESSION de façon plus approfondie, et finalement j'ai réussi!
//=====Envoi de l'e-mail.
session_start();
if ($_SESSION == null) {
$reload = $_SESSION["session_courante"] = 0;
if ($reload == 0) {
$reload = $_SESSION['session_courante'] = 1;
}
} else {
echo '2';
$reload = $_SESSION['session_courante'] = 2;
}
if ($reload == 1) {
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e) {
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
} else {
}
//=====
Le truc c'est qu'il faudrait que je trouve un moyen de détruire la session plus tard, un peu comme un timeout enregistré côté serveur (je ne veux pas utiliser les cookies, c'est pas fiable)
Parce que les sessions qui durent 10 minutes c'est pas terrible ^^
//=====Envoi de l'e-mail.
session_start();
if ($_SESSION == null) {
$reload = $_SESSION["session_courante"] = 0;
if ($reload == 0) {
$reload = $_SESSION['session_courante'] = 1;
}
} else {
echo '2';
$reload = $_SESSION['session_courante'] = 2;
}
if ($reload == 1) {
Try{
mail($destinataire,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
mail($expediteur,utf8_decode($object),utf8_decode($msg.$br.$br.$msg_disp),$header);
}
catch(Exception $e) {
echo "Erreur: ", $e->getMessage(), "\n";
}
if ($suggestion2) {
Try{
mail($webmaster,utf8_decode($object_sugg),utf8_decode($suggestion2),$header);
}
catch(Exception $e){
echo $br.$br."Erreur: ", $e->getMessage(), "\n";
}
}
} else {
}
//=====
Le truc c'est qu'il faudrait que je trouve un moyen de détruire la session plus tard, un peu comme un timeout enregistré côté serveur (je ne veux pas utiliser les cookies, c'est pas fiable)
Parce que les sessions qui durent 10 minutes c'est pas terrible ^^
La redirection est déjà mise en place avec un javascript et commence au bout de 30s,
le soucis c'était le refresh
je vais essayer le input Hidden! merci