Formulaire et rafraichissement

Eléphanteau du PHP | 34 Messages

04 juil. 2006, 16:47

Bonjour,

Je cherche une méthode pour empécher la validation multiple lors d'un F5.

J'ai essayé la fonction unset() pour vider les variable, sans succès.
J'ai essayé les session, sans succès.

PS : je n'utilise pas les renvoi ("Location:") Je je ne veux pas les utiliser.


Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juil. 2006, 17:02

PS : je n'utilise pas les renvoi ("Location:") Je je ne veux pas les utiliser.
C'est bien dommage, c'est la meilleure solution et la plus simple... (voire le pattern PRG (Post-Redirect-Get) sur le forum ou sur google)

Le unset ne peut fonctionner, lors du rafraichissement (par F5, bouton actualiser, précédent/suivant, etc.) toutes les données sont envoyées à nouveau (c'est le principe de l'actualisation de toute façon :))

Maintenant tu peux essayer de coller un flag en session après un enregistrement, l'utiliser pour empêcher le renvoi des données et trouver un moyen pour le supprimer pour permettre l'envoi d'un nouveau formulaire tout en continuant de bloquer le précédent d'une actualisation par l'un des moyens sus-cités...

bref, bon courage :)

Eléphanteau du PHP | 34 Messages

04 juil. 2006, 17:12

Salut,

Avec les session, j'ai procédé comme suit...

Code : Tout sélectionner

if (!isset($valide)) { session_start(); } // Validation du formulaire if (isset($valide) && $_SESSION['ip'] == $_SERVER['HTTP_CLIENT_IP']) { ... } if (isset($valide) && $_SESSION['ip'] == $_SERVER['HTTP_CLIENT_IP'] && ...) { ... session_destroy(); } else { $_SESSION['ip'] = $_SERVER['HTTP_CLIENT_IP']; <h1>Formulaire de contact</h1> }
Traduction :
Je vérifie si le formulaire a été validé.
Si non-valid, je crée une session.
J'affcihe le formulaire et je récupère l'IP.
Je valide le formulaire et revient en haut de script
Si oui-valid, je trtaite mon formulaire, puis j'envoi un mail.
Ensuite, je détruit la session.

Normalement, si je fais F5, la session étant détruite, je ne peut renvoyer mon mail.

Le problème est le suivant à la destruction de la session :

Code : Tout sélectionner

Warning: session_destroy(): Trying to destroy uninitialized session in ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juil. 2006, 17:18

C'est parce que tu ne fais pas ton session_start() une fois que le formulaire est envoyé, tu ne peux donc pas la détruire :)

Le premier if() ne sert à rien, tu dois toujours démarrer ta session :)

Mais cela dit, avec cette façon de faire tu résous uniquement l'actualisation via F5 et pas le repost des données. Si une fois le formulaire envoyé je clique sur précédent il me recréer la session et si je clique sur suivant il renvoi les données avec une session valide...

Eléphanteau du PHP | 34 Messages

04 juil. 2006, 17:32

Ok, pour le session_start... Une erreur


Edit:

$_SERVER['REMOTE_ADDR'] voilà pour l'IP...

Et maintenant, ça marche. :wink:


Et le back ne me réaffiche pas mes données. :roll: