Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insertion simultanée données dans 2 tables

    13 décembre 2019 à 10:48:52

    Bonjour, je souhaite créer une procédure sous SQL permettant d'insérer des données dans 2 tables différentes. J'ai une table Client (ID PK, nom, prenom, ID_Compte FK) et une table ComptesFidelite(ID_Compte PK, Adresse...). Le but est de permettre de créer un nouveau compte, et donc d'enregistrer les données entrées dans ces deux tables. Est-il possible de le faire? Est-ce que la commande UPDATE permettrait de le faire?

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      13 décembre 2019 à 13:07:41

      Bonjour,

      Il faut d'abord créer l'enregistrement dans la table fidélité, récupérer l'id créé et ensuite créer le client en utilisant l'id récupéré ...

      Par exemple, avec MySQL cela pourrait être :

      INSERT INTO ComptesFidelite ( Adresse, etc. )
      VALUES ( 'adresse', etc. );
      
      INSERT INTO Client ( nom, prenom, ID_Compte )
      VALUES ( 'nom', 'prenom', LAST_INSERT_ID() );

      LAST_INSERT_ID() est propre à MySQL, en fonction de ton SGBD tu auras d'autres syntaxes à adapter ...

      -
      Edité par Benzouye 13 décembre 2019 à 13:07:53

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        13 décembre 2019 à 13:33:06

        D'accord, merci. Mais il faut le faire en deux temps? On ne peut pas le mettre dans une même requête?
        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2019 à 18:18:32

          On ne peut pas insérer dans deux tables en même temps non.

          D'autant plus dans le cas évoqué puisqu'il faut que la fidélité soit créée avant le client ... Au passage on fait plutôt le contraire d'habitude ... C'est la carte qui est liée au client ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            19 décembre 2019 à 12:33:01

            Bonjour à vous, j'ai essayé ce que vous avez dit  mais rien. Je vous remercie de m'aider. Voici donc le script que je voudrais réaliser. Insérer des données dans deux tables dont l'une est une clé étrangère de l'autre table. Dans mon exemple la colonne idEleve est une clé étrangère dans la table inscription referençant l'id_eleve de la table eleve.

            Le soucis c'est que les données arrivent bien dans la première  table eleve mais pas dans l'autre.

            J'ai crée la relation à partir de phpmyadmin voici des images illustrant mes deux tables et la contrainte de clé étrangère.

            Et voici l'erreur qui s'affiche :

            Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 2 in /opt/lampp/htdocs/APIMONNIN/test_fk.php:54 Stack trace: #0 /opt/lampp/htdocs/APIMONNIN/test_fk.php(54): PDOStatement->execute(Array) #1 {main} thrown in /opt/lampp/htdocs/APIMONNIN/test_fk.php on line 54

            Pour finir voici le le code source:

            <?php
            //Connection à la BDD
                //Database credentials
            define("DB_HOST", "localhost");
            define('DB_NAME', 'test_fk');
            define('DB_CHARSET', 'utf8');
            define('DB_USERNAME', 'root');
            define('DB_PASSWORD', 'root123456');
            
            try
            {
                $db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USERNAME, DB_PASSWORD,
                                [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
            }
            catch(Exception $e)
            {
                die("Erreur: " . $e->getMessage()) ;
            }
            
                if(isset($_POST['submit']))
                {
                    $nom = filter_input(INPUT_POST, 'nom', FILTER_SANITIZE_STRING);
                    $prenom = filter_input(INPUT_POST, 'prenom', FILTER_SANITIZE_STRING);
                    $sexe = filter_input(INPUT_POST, 'sexe', FILTER_SANITIZE_STRING);
                    $classe = filter_input(INPUT_POST, 'classe', FILTER_SANITIZE_STRING);
                    $scolarite = filter_input(INPUT_POST, 'scolarite', FILTER_SANITIZE_NUMBER_INT); 
                
                    //Insertion en premier lieu de la table eleve
                    $req = $db->prepare("INSERT INTO eleve(nom, prenom, sexe)
                                         VALUES(:nom, :prenom, :sexe)");
                  $data =  $req->execute([
                                                    'nom' => $nom,
                                                    'prenom' => $prenom,
                                                    'sexe' => $sexe]); 
                                                     
                    
                    if($data) //Si la requete a reussi
                    {
            
                       // die($db->lastInsertId()) ;
                       $idEleve = $db->lastInsertId() ;
                       $req->closeCursor();
                       
                       
                        //On récupère la dernière valeur de l'id stocké dans la table eleve.
            
                        //Insertion dans la table inscription
                        $rq = $db->prepare("INSERT INTO inscription(classe, scolarite, id_eleve)
                                            VALUES(:classe, :scolarite, :idEleve");
                        $rq->execute(
                            [
                                'classe' => $classe,
                                'scolarite' => $scolarite,
                                'idEleve' => $idEleve 
                                
                            ]
                        ); 
                        
                        echo "Cool Monnin" ;
            
            
            
            
                    }
            
                }
            ?>
            
            
            <!DOCTYPE html>
            <html lang="fr">
            <head>
              <meta charset="utf-8">
              <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
              <meta http-equiv="x-ua-compatible" content="ie=edge">
              <title>Insertion de données avec les clés étrangères</title>
              </style>
            </head>
            <body>
            
             <form method="post"> 
                <input type="text" name="nom" placeholder="Entrez votre nom"> </br>
                <input type="text" name="prenom" placeholder="Entrez votre prenom"> </br>
                <input type="text" name="sexe" placeholder="Entrez votre sexe"> </br>
                <input type="text" name="classe" placeholder="Entrez votre classe"> </br>
                <input type="number" name="scolarite" placeholder="Entrez votre scolarité"> </br>
                <input type="submit" name="submit" value="Envoyer"> 
             </body>
                 
            </body>
            </html>
            


            Je vous prie de bien vouloir m'aider.


            -
            Edité par MosesCI 19 décembre 2019 à 12:34:59

            • Partager sur Facebook
            • Partager sur Twitter
              19 décembre 2019 à 13:31:00

              Bonjour,

              C'est un deuxième compte avec lequel tu postes ? Ou tu squattes le sujet d'un autre membre ?

              Sinon pour ton problème :

              MosesCI a écrit:

                          //Insertion dans la table inscription
                          $rq = $db->prepare("INSERT INTO inscription(classe, scolarite, id_eleve)
                                              VALUES(:classe, :scolarite, :idEleve");

              C'est vrai que l'erreur MySQL retournée n'est pas très aidante, mais il y a une erreur de syntaxe dans ta requête, la parenthèse fermante de VALUES est manquante.

              Il faut corriger ainsi :

                          //Insertion dans la table inscription
                          $rq = $db->prepare("INSERT INTO inscription(classe, scolarite, id_eleve)
                                              VALUES(:classe, :scolarite, :idEleve)");
              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                19 décembre 2019 à 14:33:16

                Benzouye a écrit:

                Bonjour,

                C'est un deuxième compte avec lequel tu postes ? Ou tu squattes le sujet d'un autre membre ?

                Sinon pour ton problème :

                @Je squatte le sujet d'un autre membre. Merci de m'avoir repondu.

                MosesCI a écrit:

                            //Insertion dans la table inscription
                            $rq = $db->prepare("INSERT INTO inscription(classe, scolarite, id_eleve)
                                                VALUES(:classe, :scolarite, :idEleve");

                C'est vrai que l'erreur MySQL retournée n'est pas très aidante, mais il y a une erreur de syntaxe dans ta requête, la parenthèse fermante de VALUES est manquante.

                Il faut corriger ainsi :

                            //Insertion dans la table inscription
                            $rq = $db->prepare("INSERT INTO inscription(classe, scolarite, id_eleve)
                                                VALUES(:classe, :scolarite, :idEleve)");

                J'ai en effet corrigé cette erreur ça marche super bien. Je vous remercie de tout mon être. Vous m'avez beaucoup aidé. Merci encore.
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juillet 2022 à 13:24:48

                  Bonjour je souhaite inserer des donnees entrees par un form fait en html dans deux tables differentes reliees entre elles par une cle etrangere , et que ces donnees soient visible dans les deux tables sur phpmyadmin , merci d'avance
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Insertion simultanée données dans 2 tables

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown