Empêcher le double envois des données d'un formulaire?
Résolu/Fermé
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
-
17 sept. 2016 à 16:35
Zick__barrimor Messages postés 62 Date d'inscription jeudi 31 juillet 2014 Statut Membre Dernière intervention 18 septembre 2016 - 17 sept. 2016 à 19:58
Zick__barrimor Messages postés 62 Date d'inscription jeudi 31 juillet 2014 Statut Membre Dernière intervention 18 septembre 2016 - 17 sept. 2016 à 19:58
A voir également:
- Empêcher le double envois des données d'un formulaire?
- Double ecran - Guide
- Whatsapp double sim - Guide
- Formulaire de réclamation facebook - Guide
- Double appel - Guide
- Double authentification google - Guide
4 réponses
NHenry
Messages postés
15175
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 décembre 2024
350
17 sept. 2016 à 16:39
17 sept. 2016 à 16:39
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.
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
7
17 sept. 2016 à 16:49
17 sept. 2016 à 16:49
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
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
7
17 sept. 2016 à 16:50
17 sept. 2016 à 16:50
¨Par contre ça t'embeterais de m'écrire le code stp? Comme je connais pas trop l'input ^^ merci
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
7
17 sept. 2016 à 18:29
17 sept. 2016 à 18:29
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.
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
7
17 sept. 2016 à 18:36
17 sept. 2016 à 18:36
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..
Zick__barrimor
Messages postés
62
Date d'inscription
jeudi 31 juillet 2014
Statut
Membre
Dernière intervention
18 septembre 2016
7
17 sept. 2016 à 19:58
17 sept. 2016 à 19:58
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 ^^
17 sept. 2016 à 16:46
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
17 sept. 2016 à 17:26