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

PHP & Base de données Discussion :

vider formulaire apres envoi [MySQL]


Sujet :

PHP & Base de données

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 130
    Points : 76
    Points
    76
    Par défaut vider formulaire apres envoi
    bonjour

    je suis en train de de renseigner une base donnees par formuliare.
    pour le moment c est local.
    tout fonctionne bine .j envoi les donnees et il me les affiche dans une autre fenetre .
    le probleme reside dans le fait que les donnees sont dupliquees quand j appuie une deuxieme fois sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    actualiser ou F5 par exemple.
    comment faire pour eviter cela ?

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    tu peux récupérer le dernier id enregistré, le mettre dans un champs caché de ton formulaire, puis utiliser REPLACE à la place de INSERT, si ta base te le permet (MySQL)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php 
    $res = mysql_query("SELECT LAST_INSERT_ID() FROM `matable`");
    if(!$res) die (mysql_error());
    $row = mysql_fetch_row($res);
    $id = $row[0] + 1;
    ?>
    <form method="post" action="mapage.php">
    <input type="hidden" name="id" value="<?php echo $id; ?>" />
    <input type="submit" name="sub" value="envoyer" />
    </form>
    puis dans la page qui fait l'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $id = (!isset($_POST['id']))?(''):($_POST['id']);
    if(!empty($id)) {
       $res = mysql_query("REPLACE INTO `matable` VALUES ($id, $autre_valeur, $etc, $etc)";
       if(!$res) die (mysql_error());
    }
    ?>

  3. #3
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Il te faut rediriger ton navigateur sur une autre url pour éviter ce problème.

    Dans l'attribut action de ta balise form, tu donnes le nom d'un fichier
    php responsable de l'insertion (par ex: update.php). A la fin de l'insertion des données tu donnes
    un ordre de redirection à ton navigateur vers la page qui affiches les données.

    La redirection est une réponse HTTP qui fait que le navigateur refait
    une requête sur l'url donnée. Ainsi en cas de F5 c'est la deuxièmes url
    qui est utilisée pour rafraichir et non celle contenue dans ton action

    Exemple de la page update.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
       // insertion dans la db d'apres les données de la requête
      header("Location: http://tonsite/ta-page-affichage.php");
      exit;
    ?>
    Ainsi tu sépare aussi le code php qui a un rôle de commandes de celui
    qui a un rôle d'affichage, et à mon avis c'est pas un mal :-)

    A+
    Marc
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  4. #4
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par marcha
    Il te faut rediriger ton navigateur sur une autre url pour éviter ce problème.
    hmmm, et si tu appuies sur "return" au lieu de F5 ?

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut ska_root,

    Peux-tu préciser ?

    A+
    Marc
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 130
    Points : 76
    Points
    76
    Par défaut
    j essai et je reviens
    mais j aimerai signaler que l'id est auto_increment
    donc il n a pas le meme id que le dernier inserer?
    en tout j essaie et
    je te tiens au courant .
    a tout

  7. #7
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par marcha
    Salut ska_root,

    Peux-tu préciser ?

    A+
    Marc
    tu veux que je précise quoi ? tu connais pas la touche "return" de ton clavier ? c'est la même chose que de cliquer sur la flèche pour revenir une page en arrière sur IE.
    avec ta solution, une fois redirigé si tu appuies dessus, tu reviens sur la dernière page vue donc celle de l'enregistrement avec les valeur des superglobales $_POST et $_GET... donc ré-enregistrement

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Je pense qu'un javascript qui vide le formulaire au chargement de la page pour le coté visuel.

    Plus un vidage des variables après insertion devrait aller.




  9. #9
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par nestam
    j essai et je reviens
    mais j aimerai signaler que l'id est auto_increment
    donc il n a pas le meme id que le dernier inserer?
    en tout j essaie et
    je te tiens au courant .
    a tout
    last_insert_id retourne la valeur de ton auto_incrément actuel, dans le code que je te fais voir, tu incrémentes la valeur obtenue toi-même dans le formulaire, et tu te sers de REPLACE dans la page qui modifie, ce qui va vérifier dans la base si cette valeur existe, et dans ce cas faire un update, ou alors insérer une nouvelle ligne
    si tu ré-actualise la page, peut-importe comment, tu ré-obtiens les valeurs du post, donc il va faire un update puisque la ligne existe déjà...

    ça ira là ?

  10. #10
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par Gaël Donat
    Je pense qu'un javascript qui vide le formulaire au chargement de la page pour le coté visuel.

    Plus un vidage des variables après insertion devrait aller.



    hmm, t'es sûr que c'est le mieux gaël ? javascript doit-être activé côté client, et si tu mets les valeurs à enregistrer à blanc, t'as intérêt à le vérifier avant l'action sur la base, sinon tu peux faire une belle erreur mysql.. non ?

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    rien ne t'empeche de génerer le script javascript coté serveur depuis Php après vérification.

  12. #12
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut ska_root,

    Je pense que tu parles de "BackSpace". Pour moi "Return" c'est la touche
    Enter. Mais c'est un détail. Le problème dont tu parles c'est:

    Que ce passe-t-il si on revient en arrière dans l'historique et qu'on repost
    les données du formulaire ?

    J'aurrai envie de répondre, la même chose que si tu saisi des données
    identiques une deuxième fois :-)

    Par contre cela peut être bien pratique de revenir en arrière pour
    pouvoir poster à nouveau des données qui diffèrent peu de l'enregistrement
    précédent pour ne pas tout devoir retapper et ta solution empêche de
    la faire me semble-t-il ?

    A+
    Marc
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  13. #13
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    gaël > oui, c'est vrai...

    marcha > ok pour "backspace", mais pas ok pour ton histoire de rafraichissment, il parle d'auto-incrément dans son dernier post, donc je suppose qu'il insére un null, si tu rafraichis la page tu insères donc une nouvelle ligne...

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Citation Envoyé par marcha
    J'aurrai envie de répondre, la même chose que si tu saisi des données
    identiques une deuxième fois :-)
    de la meme facon, un javascript sur le onload de la page va re-vider le formulaire si tu fais un retour dans l'historique :-)

  15. #15
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut ska_root,

    marcha >... pas ok pour ton histoire de rafraichissment, il parle d'auto-incrément dans son dernier post, donc je suppose qu'il insére un null, si tu rafraichis la page tu insères donc une nouvelle ligne...
    Le navigateur va rafraichir le dernier url sur lequel il se trouve, si
    cet url est celui d'une page qui ne contient que tu code d'affichage
    il n'y aurra pas d'insertion dans la db quelque soit le nb de F5 que l'on fait.

    Je re-explique plus en détail, j'ai peut-être baclé un peu.

    disons que:

    affichage.php est une page qui affiche des enregistrements sous
    forme de liste

    formulaire.php est la page d'édition des données

    update.php est la page de commande pour la mise à jour

    Voici un exemple de chaque page:

    affichage.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
      // SELECT des enregistrements
      // boucle d'affichage 
      // Un lien sur formulaire.php (bouton genre: nouvel enregistrement)
    ?>
    formulaire.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form action='update.php'>
    ...
    </form>
    update.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
      // INSERT dans la db
      header("Location: http://lesite/affichage.php");
      exit;
    ?>
    Le code d'insertion dans la DB est à l'url update.php qui est un
    url transitoire dû à la redirection. Ainsi, après une insertion le
    navigateur reçoit une réponse HTTP 302 dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HTTP/1.x 302 Found
    Location: http://tonsite/affichage.php
    Donc le navigateur considère que update.php à bougé et il se rends
    à l'url indiqué par l'en-tête Location et il refait une requête de
    type GET sans information (pas de query string).

    J'espère que c'est plus compréhensible ainsi.
    A+
    Marc
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  16. #16
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    au temps pour moi, et je te présente toutes mes excuses marc, si le besoin de nestam permet la redirection, ta solution est sans aucun doute la plus simple et la plus efficace.

    mea culpa
    ;-)

  17. #17
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 130
    Points : 76
    Points
    76
    Par défaut
    merci marcha
    c est genial ça march ebine man
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] sortie de formulaire apres envoi du mail
    Par viavba dans le forum Langage
    Réponses: 10
    Dernier message: 24/11/2011, 16h18
  2. [1.x] Modification valeurs formulaire après envoie
    Par mixka13 dans le forum Symfony
    Réponses: 5
    Dernier message: 10/05/2011, 14h38
  3. fermeture d'un formulaire après envoi
    Par speedylol dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/12/2007, 11h47
  4. Raffrachissement du formulaire apres envoi.
    Par Mysti¢ dans le forum Langage
    Réponses: 2
    Dernier message: 03/04/2006, 17h24
  5. vider les donnees formulaire apres envoie
    Par nestam dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 20/03/2006, 14h59

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