Auteur Sujet: Refresh De Form Post  (Lu 2932 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Abonn

  • Débutant
  • *
  • Messages: 61
Refresh De Form Post
« le: 03 Septembre 2003 à 13:05:05 »
Hello,

J'ai un Form (Post) sur une page qui appelle cette même page une fois validé (insertion de texte dans la même page que le form).

Et j'ai 2 problèmes :

1. De temps à autre la tentative échoue : post validé, même page apparait et... rien, pas de texte inséré... (généralement le 1er test après affichage de la page)

2. Si l'utilisateur fait "Actualiser" dans son browser les variables sont toujours présentes et l'insertion peut se faire une nouvelle fois (à l'infini).
Y'a t il un moyen de unset de ces variables ou un contournement style "détection de IP et interdiction de reposter dans les 5 minutes...) ?

Merci pour vos suggestions.
A.
 

Hors ligne Dash

  • Débutant
  • *
  • Messages: 61
    • http://www.phpnet.org/forum/index.php?showuser=454
Refresh De Form Post
« Réponse #1 le: 03 Septembre 2003 à 15:10:48 »
Bonjour,
si tu veux utiliser un cookie de session, tu peux jouer avec un timer. C'est une possibilite.

Ca donne quelque chose comme ceci :

if (empty($_SESSION['timeout'])) or (time()<$_SESSION['timeout'])
{
   //traitement du flood
   ...
}

else
{
   //traitement "normal" des donnees envoyees par le formulaire
   ...

   $_SESSION['timeout']=time()+(60*5); //cad 5 minutes, sauf erreur de ma part - a verifier

}


Une autre solution : tout stocker dans une db, et comparer chaque champs.
Si l'ip est differente et/ou le message est different tu traites le formulaire.

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Refresh De Form Post
« Réponse #2 le: 03 Septembre 2003 à 15:39:57 »
Pour le coup du "Actualiser", tu peux faire ça :

- Une page (par exemple page1.html) avec le formulaire qui envoie vers un script php.

- Un script php (par exemple script.php) qui n'envoie rien en sortie et qui se termine par un :
header('Location:page2.html');
- Une deuxième page (page2.html) qui dit que tout c'est bien passé.

Si un "Actualiser" est effectué, c'est page2.html qui sera rechargée, alors que c'est script.php qui effectue l'insert. Par contre, je ne suis pas sûr du comportement (faudrait le tester) du précédent/suivant.
 
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Abonn

  • Débutant
  • *
  • Messages: 61
Refresh De Form Post
« Réponse #3 le: 03 Septembre 2003 à 16:20:52 »
oui j'ai testé la solution de la page blanche qui semble bien fonctionner...
dommage je voulais un truc nickel avec un seul fichier

thanks

Hors ligne Fozzy

  • VIP
  • *****
  • Messages: 1 787
    • http://kipt.mferon.com
Refresh De Form Post
« Réponse #4 le: 03 Septembre 2003 à 16:33:43 »
a chaque chargement de ta page tu stocke un nombre incremental dans un champ du form.
lors du post, tu ouvre ta session et tu crée une variable pour stocker la valeur du champ si cette variable n'existe pas sinon tu compare la valeur stockée en session avec la valeur du champ envoyé par le form.
Si ces deux valeurs sont différentes (nouveau post) tu ecrase ta variable session avec la nouvelle valeur du champ sinon tu flag une variable php de ton fichier pour lui dire que c'est une actualisation et qu'il ne faut rien faire.
 

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Refresh De Form Post
« Réponse #5 le: 03 Septembre 2003 à 16:43:58 »
Citer
dommage je voulais un truc nickel avec un seul fichier
Pour n'avoir qu'un seul fichier, il suffit d'utilier un script php avec un paramètre. Par exemple :

script.php?cmd=form pour le formulaire
script.php?cmd=valid pour la validation et l'insert
script.php?cmd=result pour l'affichage du résultat
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Abonn

  • Débutant
  • *
  • Messages: 61
Refresh De Form Post
« Réponse #6 le: 03 Septembre 2003 à 18:16:19 »
Naj,

je ne comprends pas trop.
Si mon Form est posté avec script.php?cmd=form, lors du refresh ce sera toujours pareil non ?

Comment faire pour planquer une variable dans un form (Fozzy) ?

merci

A.
« Modifié: 03 Septembre 2003 à 18:16:44 par Abonn »

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Refresh De Form Post
« Réponse #7 le: 03 Septembre 2003 à 18:24:47 »
J'avais pas lu que tu voulais revenir au point de départ. Dans ce cas la première et la dernière page sont la même :

L'utilisateur arrive sur script.php?cmd=form dans lequel le formulaire pointe sur script.php?cmd=valid. Quand l'utilisateur faut "submit", c'est script.php?cmd=valid qui est appelé. Il traite le formulaire et fait l'insert puis envoie un header('Location:script.php?cmd=valid'), ce qui renvoie l'utilisateur sur script.php?cmd=valid (sans les variables).
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Fozzy

  • VIP
  • *****
  • Messages: 1 787
    • http://kipt.mferon.com
Refresh De Form Post
« Réponse #8 le: 04 Septembre 2003 à 07:58:24 »
<?
$flaglock=false;
Session_name("MA_SESSION");
Session_start();
if ( Session_is_registered( "locker" ) == true )
{
   if ( $formlock == $locker )   $flaglock = true; // cas du rechargement
}
else
{
   Session_register("locker");
}
if ( $flaglock == false ) $locker = $formlock;
Session_write_close();
?>
<html><head></head><body>
<form method=post action="mapage.php">
<input type=hidden name=formlock id=formlock value="<?=md5(uniqid(time()))?>">
<input type=text name=ma_valeur_a_saisir id=ma_valeur_a_saisir>
<input type=submit value="gooooo">
</form>
</body>
</html>

Hors ligne Abonn

  • Débutant
  • *
  • Messages: 61
Refresh De Form Post
« Réponse #9 le: 04 Septembre 2003 à 09:32:12 »
Mille mercis pour ces réponses !
A.
« Modifié: 04 Septembre 2003 à 09:32:44 par Abonn »