Problème avec actualisation d'un formulaire d'enregistrement

Résolu/Fermé
modemo2018 Messages postés 231 Date d'inscription vendredi 15 novembre 2019 Statut Membre Dernière intervention 13 octobre 2022 - 27 juil. 2020 à 10:39
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 27 juil. 2020 à 11:20
Bonjour, j'ai un souci avec le formulaire d'enregistrement que j'ai conçu, en fait la requête d'insertion s'exécute bien, mais j'ai juste rémarqué une petite anomalie, j'ai remarqué lorsque j'insère une donnée, celle-ci bien que inséré dans la base de donnée, celle-ci reste bloqué quelque part, lorsque j'actualise la page, la requête précédemment inséré à la BD s'exécute une fois de plus, et du coup j'ai deux fois les mêmes données dans la BD``

voici mon code d'insertion :


 try {
  
   $sql = 'INSERT INTO agent(notemat, typenote,idmat,idagent, nbre, mois, an) VALUES(:notemat, :typenote,  :idmat, :idagent, :nbre, :mois, :an)';
    $datas = array(':notemat' => $notemat, ':typenote' => $typenote,':idmat' => $idmat, ':idagent' => $idagent ,  ':nbre' => $nbre ,':mois' => $mois , ':an' => $annee );
	  
    try {
      $req = $bdd->prepare ( $sql );
      if ( $req->execute ( $datas ) ) {
       
      } else {
        echo "<br> Erreur lors de l'enregistrement... <br>";
        print_r ( $datas );
        exit;
      }
    } catch ( Exception $e ) {
      // en cas d'erreur :
      echo "<br> Erreur lors de l'enregistrement en BDD ! " . $e->getMessage ();
      print_r ( $datas );
      exit;
    }
  } catch ( Exception $e ) {
    // en cas d'erreur :
    echo " Erreur ! " . $e->getMessage ();
    print_r ( $datas );
    exit;
  }
	


Comment puis-je faire pour arrêter cela?
A voir également:

1 réponse

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
27 juil. 2020 à 10:53
Bonjour,

j'ai du relire plusieurs fois ta question avant de comprendre de quoi il s'agissait...
Donc,
Tu valides ton formulaire... ta requête insert se fait.
Ensuite tu refresh ta page (via F5 par exemple...) et là... la requête se fait encore...
normal... puisque lorsque tu refresh, ça rejoue la dernière "requete html" envoyée.. à savoir le submit de ton formulaire.

Plusieurs façons de faire..
Soit tu utilises les variables de session
- Tu génère un id aléatoire unique (un token) dans ton formulaire ( dans un input hidden ) => Chaque fois que tu affiches ton formulaire, il faut un id aléatoire différent !
- Tu stockes cet id dans une variable de session
- Au moment de traiter le "submit" de ton formulaire , tu compares la valeurs stockées en session avec celle emises par l'input hidden. Si identique, tu traites la requête... sinon.. ben tu ne la joue pas.
- Une fois ta requête faite, tu supprime la variable en session.


Autre solution... tu joues simplement avec les redirections
Une fois la requête sql traitée... tu fais une redirection vers ta page
header("location: tapage.php");


0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
27 juil. 2020 à 10:54
NB: Cette question n'a rien à voir avec le SQL ... c'est purement un "souci" au niveau de ton code PHP.
Je déplace donc ta question dans le bon forum ( ENCORE... ??!! )

A l'avenir, merci de placer tes questions dans le BON FORUM en fonction du souci concerné !
Tout n'est pas SQL !!!
0
modemo2018 Messages postés 231 Date d'inscription vendredi 15 novembre 2019 Statut Membre Dernière intervention 13 octobre 2022 > jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
27 juil. 2020 à 11:19
Merci, problème résolu
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649 > modemo2018 Messages postés 231 Date d'inscription vendredi 15 novembre 2019 Statut Membre Dernière intervention 13 octobre 2022
27 juil. 2020 à 11:20
Dans ce cas, marque le sujet en RESOLU
0