Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Empécher les doublon avec les post


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Empécher les doublon avec les post
    Salut a tous,

    je suis sur que ce sujet a déja été abordé mais je n'en ai pas trouvé de trace.

    Je voulais savoir comment il fallait faire pour éviter l'execution multipe de page qui récupert les donné des formulaires.

    Mettons qu'un personne valide le formulaire, et qu'elle arrive sur une page qui envoie les données. Si elle raffrachie la page les données seront renvoyées une seconde fois. Comment éviter celà?
    manganimes (en construction) -
    zemanga

  2. #2
    Membre expert
    En effet, le sujet revient souvent, tu peux peut-être tester dans la BDD si les données ont déjà été saisies (ça dépend de la base).
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre éprouvé
    Après la validation, tu rediriges vers une autre page

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    if (isset($_POST)) 
       echo '<meta http-equiv="Refresh" content="5;url=autre_page" />';

  4. #4
    Membre éclairé
    Certaines applications (genre un forum phpBB) passent par une page intermédiaire puis redirigent vers la page voulue. Ainsi, le raffraichissement de la dernière page ne renvoie pas les données. Autrement, on peut stocker un nombre dans la session qu'on joindra à toutes les requêtes, genre actionid=123456. On ne validera que les requêtes correspondant au bon actionid et on incrémentera ce nombre de 1 à chaque fois. Ainsi si une action n'a pas le bon actionid c'est qu'elle a été effectuée depuis une "ancienne" page. Cette solution est particulièrement problématique lorsque l'utilisateurs navigue avec plusieurs fenêtres/onglets, où qu'il utilise beaucoup les retours en arrière.

  5. #5
    Membre éclairé
    Ouais mais dans certains c'est lourd de rediriger a chaque fois. J'ai deja vu des sites ou l'envoie sur faisait sur la meme page et les doublons n'tait pas prix en compte.

    Le probleme est avec les id qui s'autoincrement dans la BDD. Il faudrait pouvoiir effacer les variable post.
    manganimes (en construction) -
    zemanga

  6. #6
    Membre éprouvé
    Après avoir fait ton traitement, tu peux supprimer le contenu de la variable $_POST


  7. #7
    Membre éclairé
    Je vais essayer pour voir.

    En fait le problème est toujours la avec les pages intermédiaire. Car mettons que l'utilisateur est redirigé et qu'il reviennent en arrière, il retombera quand meme sur la page. Vous pouvez essayer avec phpbb, et en revenant en arrière le message n'est pas reposté.

    Normalement le navigateur informe qu'il y a des donné et il demande si on souhaite les utilisé ou pas. Mais la phpbb ne demande rien, elle ont sans doute été effacé. Peut etre de la manière dont tu parle. Je vais voir ca tout de suite.
    manganimes (en construction) -
    zemanga

  8. #8
    Membre expert
    Tu installes PhpBB et tu regardes le source alors... (ça doit bien être possible nan ?)
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  9. #9
    Membre éclairé
    Citation Envoyé par JWhite
    Tu installes PhpBB et tu regardes le source alors... (ça doit bien être possible nan ?)

    Ouais mais ca prendra énormément de temps pour trouver le bonne endroit. C'est tout en objet alors on est toujours renvoyé vers d'autres pages...
    Au pire je ferai ca mais bon j'espère ne pas avoir à le faire ^^.
    manganimes (en construction) -
    zemanga

  10. #10
    Membre éclairé
    Je viens d'essayer avec le $post=null mais ca ne marche pas.

    Quand on reviens en arrière FF récupert les variable post tel qu'elle était lors du premier appel de la page. Donc si je les efface elle sont récupérer .
    manganimes (en construction) -
    zemanga

  11. #11
    Membre éclairé
    En effet a part la redirection je crois qu'il n'y a pas d'autres solution .
    manganimes (en construction) -
    zemanga

  12. #12
    Membre régulier
    La méthode la plus fiable est effectivement de rediriger la page une fois le formulaire traité. Ca se fait avec l'en-tête http, soit en php :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nb_secondes = 5;//Nb de secondes avant la redirection
    $url_redirection = 'http://www.monsite.com/ma-page-apres-rerdirection.php';//Je te laisse deviner
    header('Refresh: ' . $nb_secondes . '; URL=' . $url_redirection);

    Egalement, si tu as peur qu'avec le bouton "back" le visiteur reviennne sur le formulaire et le reremplisse, il faut alors contrôler les données.
    Plusieurs techniques au choix en fonction du traitement des données et du temps que tu as à perdre sur ce type de contrôles :
    • Vérifier si ce n'est pas un doublon en vérifiant les valeurs des champs un à un
    • Stocker l'IP du visiteur et l'heure de l'insertion des données : Si le même visiteur a déjà saisi le formulaire dans les 10 dernières minutes, on met à jour les données dans la base au lieu de faire un nouvel INSERT
    • Eventuellement, ajouter un code image dynamique qui ne sera plus correct si on revient sur le formulaire avec "back"


    Voili voilà.

  13. #13
    Membre confirmé
    Citation Envoyé par Death83
    J'ai deja vu des sites ou l'envoie sur faisait sur la meme page et les doublons n'tait pas prix en compte.
    Est tu certains ?
    Car en générale tu as ton formulaire sur une page, ton traitement sur un fichier php et ensuite tu peut renvoyer sur la page du formulaire après traitement, donc l'internaute crois qu'il est rester sur la meme page alors qu'il à fait un petit voyage, et la plus de probleme avec le rafraichissement.

  14. #14
    Membre éclairé
    Citation Envoyé par maximenet
    Est tu certains ?
    Car en générale tu as ton formulaire sur une page, ton traitement sur un fichier php et ensuite tu peut renvoyer sur la page du formulaire après traitement, donc l'internaute crois qu'il est rester sur la meme page alors qu'il à fait un petit voyage, et la plus de probleme avec le rafraichissement.

    OUi tu as raison je me suis tromper, je n'avais pas réaliser que lorsque l'on revenait en arrière il sautait les page qui on amené un redirection.

    Sinon j'ai pas utiliser les header j'ai simplement rajouter ca dans les pages validant mon formulaires:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    echo '<meta http-equiv="refresh" content="2;URL=../index.php">';
    manganimes (en construction) -
    zemanga

  15. #15
    Membre éclairé
    J'ai peut être une piste. Chercher du coté de l'entête "Cache-control" :

    http://fr3.php.net/manual/fr/functio...r.php#AEN57767

    (Exemple 5)

    Peut être "must-revalidate" ou un autre morceau, à la rigueur fouiller la rfc ou d'autres sources. Peut être que phpBB garde la redirection pour les navigateurs qui n'interpretent pas suffisement d'instructions pour la gestion du cache.

  16. #16
    Membre confirmé
    Citation Envoyé par Blustuff
    J'ai peut être une piste. Chercher du coté de l'entête "Cache-control" :

    http://fr3.php.net/manual/fr/functio...r.php#AEN57767
    Bon maintenant il faut que quelqu'un test pour les autres

###raw>template_hook.ano_emploi###