[RESOLU] empêcher l'actualisation de la page et donc de la requete

Eléphant du PHP | 65 Messages

29 août 2014, 11:50

Salut à tous,
J'ai encore un petit souci
j'ai une page avec un formulaire cacher de type hidden mais des que je fait un f5 il me refait la requête je voudrai empêcher ce fonctionnement.
idem pour le retour en arrière du navigateur si quelque peu prendre un peu de temps pour m'expliquer
merci à tous

ynx
Mammouth du PHP | 586 Messages

29 août 2014, 12:25

Salut,

Effectivement si on rafraichit une page juste après avoir envoyé un formulaire en méthode POST, le navigateur nous indique que les données vont être à nouveau renvoyées (on relance en fait la dernière requête http faite par le navigateur, et celle-ci correspond à une requête POST dû à l'envoie de nos données via le formulaire).

Le solution la plus utilisé est de faire une redirection après le traitement du formulaire vers la page de résultat (qui peut être la page du formulaire). En effectuant cette redirection, la dernière requête du navigateur correspond alors à une requête http GET classique, et le rafraichissement de la page ne nous indiquera aucun message.

Bonne journée

Eléphant du PHP | 65 Messages

29 août 2014, 13:13

salut ynx,
C'est toute à fait sa donc pour palier a sa j'ai donc créer ma page de traitement d'un coté et je renvoi sur la page d'affichage par contre je voudrai mettre un pop qui dit que l'opération c'est bien traiter une idée?
arf je croit que je suis pas très claire
donc je m'explique j'ai 2 page traitement et affichage
affichage contiens un formulaire caché et traitement sa parle de lui même.
je fait donc un header location dans traitement mais je voudrais que arrive sur la page de destination il me dise ok ou c'est pas bon

ViPHP
xTG
ViPHP | 7331 Messages

29 août 2014, 13:37

Renseignes une variable de session avec le résultat du traitement. ;)
Tu la récupères sur le script affichage, tu l'affiches, puis tu la supprimes.
Comme ça en cas de rafraichissement plus de message/popup.

Eléphant du PHP | 65 Messages

29 août 2014, 13:55

salut xTG,
tu peut me donner un exemple que je comprenne comment on gère sa stp
avant quand je mettais tous dans la même page je faisait sa avec try succes ou catch erreur
mais la sa fonctionne toujours mais sur la page traitement est nom pas sur la même page.
je suis pas familier avec les session encore d'ou mas demande d'exemple
session start sur les deux page mais après suis larguer

ynx
Mammouth du PHP | 586 Messages

29 août 2014, 14:22

Pour afficher un message de confirmation, tu peux ajouter un paramètre get dans l'url de la redirection après le traitement :
// fin du traitement du formulaire
header('formulaire.php?succes=1');
exit();
Puis dans la page où tu affiche de le formulaire, tu affiches le message de confirmation si ce paramètre est présent :
if (!empty($_GET['succes'])) {
    echo 'Formulaire traité';
}
Bonne journée

Eléphant du PHP | 65 Messages

29 août 2014, 14:34

Nickel merci bien

Mammouth du PHP | 2278 Messages

29 août 2014, 14:37

1 Renseignes une variable de session avec le résultat du traitement. ;)
2 Tu la récupères sur le script affichage, tu l'affiches, puis tu la supprimes.
Comme ça en cas de rafraichissement plus de message/popup.
1 Dans le script où a lieu le traitement tu crées une variable de session
<?PHP
session_start();
/*...*/
if (isset($_SESSION['enregistre'])
{
$enregistre = $_SESSION['enregistre'])=;
}
else
{
$enregistre = "N3;
}

if ($enregistre == "N")
{
traitement normal;*si tout s'est bien passé
$SESSION[enregistre'] = "O";
sinon
$SESSION[enregistre'] = "N";
}
else
{
popup "pas deux fois";
}
?>

2 dans le script affichage:
<?PHP
session_start();
/*...*/

$enregistre = $SESSION[enregistre'];
suivant la valeur tu affiches le popup adapté
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD