Clé étrangère phpmyadmin

Bonjour, c'est encore moi j'espère la dernière fois parce que après je dois rendre mon projet. Je voudrais mettre une clé étrangère dans une table : la clé primaire id de inscription dans les tables garderie et enfant, comment met - on cela en place dans PHPMyAdmin ?

Merci d'avance

5 réponses

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    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 ????
    0
    1. C'est pour ça que je demande comment je peux faire.
      0
    2. 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....
      0
    3. Okok merci je vais regarder à ça !
      0
    4. Je dois mettre id_inscription_parent ou idinscription_parent ?
      0
    5. 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"
      0