IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Éviter la resoumission


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut Éviter la resoumission
    Bonjour,

    Je voudrais savoir s'il existe un moyen de contourner le message POSTDATA (quand on rafraichi une page contenant un formulaire).
    Je voudrais que les données soit envoyées qu'une seule fois, même en appuyant sur F5.
    Je sais que s'il on utilise une page externe pour traiter les données envoyées (attribut action du <form>) et qu'on redirige le navigateur sur la page du formulaire, on a pas ce problème.

    Mais j'ai pour strict consigne de rédiger tout dans la même page (traitement + affichage), oui je sais c'est crade mais bon c'est ce que ma hiérarchie veut (je ne voudrais pas la contrarier )

    Merci pour vos réponse.

  2. #2
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    bonjour,

    Plusieurs solutions s'offrent a toi, parmis elles :
    - AJAX: tu envois tes données via http_request
    - Variable de session: tu modifies ta variable de session lors de ton premier envoie pour éviter qu'il refasse le traitement lors des suivant

  3. #3
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par TucSale Voir le message
    - AJAX: tu envois tes données via http_request
    ma hiérarchie ne veut pas non plus, à ce qu'il parait ça ferait ramer les PC de nos clients mexicains
    Citation Envoyé par TucSale Voir le message
    - Variable de session: tu modifies ta variable de session lors de ton premier envoie pour éviter qu'il refasse le traitement lors des suivant
    pas très secure ce truc

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Simple.
    Lorsque tu soumets ton formulaire il peut se produire deux choses.

    Le formulaire est validé. Le formulaire n'est pas validé car mal remplit.

    Lorsque le formulaire est validé tu fais un header location sur une page de confirmation ou sur le formulaire lui même (peu importe). Ce header va te permettre de ne pas renvoyer les données lors d'un F5. En fait sa force le navigateur à zapper les données post.

    Au contraire si le formulaire n'est pas validé on ne fais pas de redirection car on veut que le navigateur sauvegarde nos données post entre deux soumissions.
    Et dans ce cas là faire un F5 n'à pas d'importance pour toi, le développeur, puisque le formulaire n'est pas validé -> pas d'enregistrements en base.

    a plus

  5. #5
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    EDIT: trop lent désolé

    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    //session_start();
    /* Test si le formulaire est validé */
    //if(isset($_POST['BTENVOI']) && $_POST['BTENVOI'] == 'envoyer' && isset($_SESSION['MaVar'])){
    if(isset($_POST['BTENVOI']) && $_POST['BTENVOI'] == 'envoyer'){
    	/* Traitement */
    	header('location: index.php');
    	//$_SESSION['MaVar'] = true;
    }
    ?>
    <html>
    <body>
    <form method="post">
    	<input type="submit" value="envoyer" name="BTENVOI" />
    </form>
    </body>
    </html>
    Le gros inconvénient est que tu ne pourras pas afficher de message après la validation

  6. #6
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par kaymak Voir le message
    Simple.
    Lorsque tu soumets ton formulaire il peut se produire deux choses.

    Le formulaire est validé. Le formulaire n'est pas validé car mal remplit.

    Lorsque le formulaire est validé tu fais un header location sur une page de confirmation ou sur le formulaire lui même (peu importe). Ce header va te permettre de ne pas renvoyer les données lors d'un F5. En fait sa force le navigateur à zapper les données post.
    pb : si je fais un header ...
    php me pete un cable en me disant que je l'ai déjà envoyé (header commun pour la mise en forme)

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    ouè sa c'est un autre problème.
    En l'occurrence c'est un problème maintes fois traités dans le forum.
    Une piste que je privilégierais perso ce sont les foncitons ob_* cf http://fr.php.net/manual/fr/ref.outcontrol.php

    bye

Discussions similaires

  1. [TEdit] Comment éviter le bip ?
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/10/2004, 13h01
  2. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 20h37
  3. Réponses: 4
    Dernier message: 28/07/2004, 11h42
  4. [eclipse 2.1][compilation] Comment éviter...
    Par ftrifiro dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h16
  5. Réponses: 2
    Dernier message: 23/12/2002, 21h34

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