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é Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut 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 Avatar de Amara
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 688
    Points : 3 112
    Points
    3 112
    Par défaut
    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).
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    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é
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 712
    Points
    712
    Par défaut
    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é Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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 expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    Après avoir fait ton traitement, tu peux supprimer le contenu de la variable $_POST


  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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 Avatar de Amara
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 688
    Points : 3 112
    Points
    3 112
    Par défaut
    Tu installes PhpBB et tu regardes le source alors... (ça doit bien être possible nan ?)
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  9. #9
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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é Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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é Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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
    Profil pro
    Inscrit en
    décembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2004
    Messages : 70
    Points : 73
    Points
    73
    Par défaut
    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é
    Homme Profil pro
    Inscrit en
    avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Turquie

    Informations forums :
    Inscription : avril 2005
    Messages : 614
    Points : 499
    Points
    499
    Par défaut
    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é Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 848
    Points
    848
    Par défaut
    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é
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 712
    Points
    712
    Par défaut
    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é
    Homme Profil pro
    Inscrit en
    avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Turquie

    Informations forums :
    Inscription : avril 2005
    Messages : 614
    Points : 499
    Points
    499
    Par défaut
    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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/11/2012, 15h24
  2. Réponses: 2
    Dernier message: 20/01/2012, 11h03
  3. afficher les doublons avec mysql
    Par oceanbigone dans le forum Requêtes
    Réponses: 10
    Dernier message: 02/10/2006, 16h57
  4. doublons avec les expressions régulières
    Par Mister Nono dans le forum Langage
    Réponses: 8
    Dernier message: 16/09/2006, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo