Problème de Messages doubles dans mon livre d'or

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de Messages doubles dans mon livre d'or

par Tictac » 10 août 2006, 10:20

ok merci pour l'info , je suis encore moi bête aujourd'hui !! ca fait plaisir ;)

par zeus » 10 août 2006, 10:16

Non, parce que, quand tu revalides la page, c'est le navigateur qui renvoi les données au serveur.

Le unset n'a comme effet de supprimet les POST qui se trouvent sur le serveur ;)

par Tictac » 10 août 2006, 10:04

Petite question ! vis-à-vis de ce problème !! Si dans le bas de la page on fais un unset($_POST) ! es-ce que ça peut résoudre le problème ?

par zeus » 10 août 2006, 09:59

La solution bateau est, effectivement, de séparer la page qui affiche le livre d'or de celle qui l'enregistre.

Donc, à l'enregistrement d'un nouveau message, tu passes dans le script d'enregistrement et, à la fin de l'enregistrement, tu rediriges vers l'affichage.

Cette solution permet que, si tu raffraichis, tu ne refait que l'affichage

par Ryle » 10 août 2006, 09:58

C'est normal, si tu actualises une page qui a nécessité les données d'un formulaire en POST pour s'ouvrir, il te demande si tu veux les renvoyer pour pouvoir ouvrir exactement la même page aevc les mêmes informations... et si tu dis oui, ben forcément il les renvois ;)

Tu auras également ce problème en faisant précédent/suivant puisque tu reviens sur la même page.

Pour éviter cela, on recommande d'utiliser le pattern "PRG : Post Redirect Get". L'idée est de récupérer les données reçues en "post", faire le traitement (dans ton cas ecrire dans ton livre d'or) puis rediriger l'utilisateur (avec la fonction header() nottamment) vers une page (ça peut être la même) appellée en "get" pour lui passer les éléments éventuels dont elle a besoin.

Ainsi, lorsque que actualises ou revient sur la page, c'est celle qui a été ouverte après la redirection qui s'actualise (donc pas de double post, pas de message de confirmation etc.)
Tu peux faire une petite recherche sur le forum si tu veux trouver un peu plus d'infos sur ce principe de fonctionnement :)

par starkeus » 10 août 2006, 09:40

Pourquoi tu réactualises aussi ? tu fais dans la même page?

Problème de Messages doubles dans mon livre d'or

par kiss20 » 09 août 2006, 21:24

Bonjour,

Je viens de réaliser un livre d'or en php mais j'ai un petit problème:
Quand j'actualise la page pour voir s'il y a de nouveaux messages, le navigateur me demande s'il doit renvoyer les informations.
Si je dis "oui", alors le message qu'il vient d'envoyer sera réenvoyé, ce qui fait qu'il apparaîtra en double !
Comment faire pour eviter que cela n'arrive?
Voici mon code php:
 
    
if (isset($_POST['message']) AND isset($_POST['pseudo']))
{

  if (trim($_POST['message']) != NULL AND ($_POST['pseudo']) != NULL )
  {

       if($message != $donneestest['message']) // eliminer les messages  doubles
       {
       $test = mysql_query("SELECT * FROM livre ORDER BY id DESC LIMIT    0,1") or die (mysql_error());
       $donneestest = mysql_fetch_array($test);
       $pseudo = htmlentities ($_POST['pseudo'], ENT_QUOTES);
       $message = htmlentities ($_POST['message'], ENT_QUOTES);
       $message = nl2br($message);

        mysql_query("INSERT INTO livre VALUES('', ' " .$pseudo. " ', ' " .$message. " ')");
       }

   }
} 

Le code ci-dessus ne marchant pas, je viens demander de l'aide.
Merci d'avance.