Clé étrangère phpmyadmin
Merci d'avance
5 réponses
La problématique porte sur la mise en place de clés étrangères liant la table inscription_enfant à celle de garderie via l'id_inscription, avec PHPMyAdmin et des insertions coordonnées. Des réponses insistent sur l'ordre des insertions et l'existence préalable des enregistrements référencés, d'où l'usage de lastInsertId pour récupérer les IDs générés et le choix précis des noms de clés (id_inscription_parent ou idinscription_parent). Des exemples de code montrent des requêtes préparées avec PDO, la récupération des IDs via lastInsertId et des messages d'erreur détaillés pour diagnostiquer les échecs liés aux clés étrangères. En parallèle, des conseils soulignent la nécessité d'un modèle conceptuel clair (MCD), de vérifier la structure des tables et de respecter le référentiel des données pour éviter les insertions invalides.
-
ModérateurBonjour,
Tu peux essayer ceci :
<?php error_reporting(E_ALL); //----------------------------------------------------------------------------------// // Connnexion à la BDD //----------------------------------------------------------------------------------// require_once "cnxBDD.php"; //----------------------------------------------------------------------------------// //récupération des variables //----------------------------------------------------------------------------------// $nom = isset($_POST['nom']) ? htmlentities(trim($_POST['nom'])) : ''; $prenom = isset($_POST['prenom']) ? htmlentities(trim($_POST['prenom'])) : ''; $id_ecole = isset($_POST['ecole']) ? htmlentities(trim($_POST['ecole'])) : ''; $lundi_matin = isset($_POST['lundi_matin']) ? 1 : 0; $mardi_matin = isset($_POST['mardi_matin']) ? 1 : 0; $mercredi_matin = isset($_POST['mercredi_matin']) ? 1 : 0; $jeudi_matin = isset($_POST['jeudi_matin']) ? 1 : 0; $vendredi_matin = isset($_POST['vendredi_matin'])? 1 : 0; $lundi_soir = isset($_POST['lundi_soir']) ? 1 : 0; $mardi_soir = isset($_POST['mardi_soir']) ? 1 : 0; $mercredi_soir = isset($_POST['mercredi_soir']) ? 1 : 0; $jeudi_soir = isset($_POST['jeudi_soir']) ? 1 : 0; $vendredi_soir = isset($_POST['vendredi_soir']) ? 1 : 0; //----------------------------------------------------------------------------------// // Traitement du SUBMIT //----------------------------------------------------------------------------------// if(isset($_POST['submit'])) { // Ajout dans la table inscription_enfant try { $a_datas = array(":nom"=>$nom,":prenom"=>$prenom,":id_ecole"=>$id_ecole); $req = "INSERT INTO inscription_enfant (nom, prenom, id_ecole) VALUES(:nom, :prenom, :id_ecole)"; $stmt = $bdd->prepare($req); $stmt->execute($a_datas); //récupération de l'ID créé en bdd $id_inscription_enfant = $bdd->lastInsertId(); if($id_inscription_enfant){ echo " Inscription dans la table inscription_enfant : OK -> ID = ".$id_inscription_enfant; }else{ echo "<br>Erreur lors de l'inscription dans la table inscription_enfant"; } }catch (Exception $e){ echo "<br>Erreur : " . $e->getMessage(); echo "<br> <b>Requete :<b><br> ".$req; echo "<br> params :<br><pre>"; print_r($a_datas); echo "</pre>"; exit(); } // Ajout dans la table garderie try{ $sql = "INSERT INTO garderie (lundi_matin, lundi_soir, mardi_matin, mardi_soir, mercredi_matin, mercredi_soir, jeudi_matin, jeudi_soir, vendredi_matin, vendredi_soir) VALUES (:lundi_matin, :lundi_soir, :mardi_matin, :mardi_soir, :mercredi_matin, :mercredi_soir, :jeudi_matin, :jeudi_soir, :vendredi_matin, :vendredi_soir)"; $a_data = array(":lundi_matin"=> $lundi_matin ,":lundi_soir"=> $lundi_soir ,":mardi_matin"=> $mardi_matin , ":mardi_soir" => $mardi_soir , ":mercredi_matin" => $mercredi_matin , ":mercredi_soir" => $mercredi_soir , ":jeudi_matin" => $jeudi_matin , ":jeudi_soir" => $jeudi_soir , ":vendredi_matin" => $vendredi_matin , ":vendredi_soir" => $vendredi_soir); $stmt = $bdd->prepare($sql); $stmt->execute($a_data); //récupération de l'ID créé en bdd $id_garderie = $bdd->lastInsertId(); if($id_garderie){ echo " Inscription en garderie : OK -> ID = ".$id_garderie; }else{ echo "<br>Erreur lors de l'inscription en garderie"; } } catch (Exception $e){ echo 'Erreur : ' . $e->getMessage(); echo "<br> Dans la requête :".$sql; echo "<br> Variables :<br><pre>"; print_r($a_data); echo "</pre>"; exit(); } } // fin du IF submit
par contre... ta table garderie... tu la lie comment aux autres tables ??
car là .. je ne vois pas comment tu vas ensuite t'en servir....
Ne te manquerait-il pas un champ id_inscription par exemple ????
-
-
Modérateur@lecjoh59
C'est pour ça que je demande comment je peux faire.
Non.. ta question concernait un souci d'insertion en BDD ..... à aucun moment tu ne nous as demandé quoi que ce soit au sujet de la structure de tes tables !
Donc.. comment faire ... et bien... si tu lis mon message précédent... je te dis :
Ne te manquerait-il pas un champ id_inscription par exemple ????
Donc... ben... tu rajoutes ce champ !!!!!
soit dans ta table inscription une clé vers la table garderie
soit dans la table garderie une clé vers la table inscription
a toi de voir.... -
-
-
Modérateur@lecjoh59
Je dois mettre id_inscription_parent ou idinscription_parent ?
Peut importe. et tu n'es même pas obligé de mettre le mot "parent"
-



