SQL Soucis clé étrangère

Fermé
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 - Modifié par TRUNCKS le 31/10/2011 à 09:49
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 - 31 oct. 2011 à 17:18
Bonjour à vous,

J'ai lu quelques tutos concernant les clé étrangères ( je suis sous phpmyadmin ) mais je n'arrive toujours pas à mettre en place un truc tout bête, je pense que j'ai une erreur de structure.

J'ai tout simplement deux tables: une table catégorie et une table produit.

Je peux que les produits soient affectés à une catégorie.
Que si la catégorie disparaît, tous les produits virent mais que si l'on supprime tous les produits, la catégorie reste.

J'ai fait cela:

Catégorie ( ID_catégorie (primaire), nom_categorie )

Produits ( ID_produit (primaire), nom produit, produit_id (étrangère) )

Ce n'est pas comme ça qu'il faut faire ?

Je me retrouve avec cela quand j'essaye d'enregistrer une clé étrangère dans la bdd:

erreur sq: Cannot add or update a child row: a foreign key constraint fails ('produits'.'produits', CONSTRAINT 'produits_ibfk_1' FOREIGN KEY ('categorie_id') REFERENCES 'categories' ('ID_categorie') ON DELETE CASCADE ON UPDATE CASCADE)
A voir également:

11 réponses

bissdebrazza Messages postés 2065 Date d'inscription vendredi 29 juin 2007 Statut Contributeur Dernière intervention 7 décembre 2017 712
31 oct. 2011 à 11:49
Bonjour!

Catégorie ( ID_catégorie (primaire), nom_categorie ) 

Produits ( ID_produit (primaire), nom produit, ID_categorie(clé étrangère) )
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
Modifié par TRUNCKS le 31/10/2011 à 13:33
Merci, je viens de corriger mes tables mais j'ai toujours le problème:

En gros, je récupère une liste déroulante comme ceci:

p><select name="nom_categorie">   
        <?php while ($result = mysql_fetch_array($requete)) { 
  echo '<option value="'.$result['dossier'].'">'.$result['nom_categorie'].'</option>'; 
  }?></select></p> 


Et je récupère comme ça:

$nom_categorie = mysql_real_escape_string($_POST['nom_categorie']); 
  
 $requete_cat = "SELECT ID_categorie 
             FROM categories 
       WHERE ID_categorie = '$nom_categorie'"; 
  
 //exécution de la requête: 
 $categorie = mysql_query($requete_cat) or die( mysql_error()); 


Ensuite, j'enregistre l'id dans la base.
0
bissdebrazza Messages postés 2065 Date d'inscription vendredi 29 juin 2007 Statut Contributeur Dernière intervention 7 décembre 2017 712
31 oct. 2011 à 14:40
Salut!
voila ce que tu vas faire,tu vas dans phpmyadmin sur la table produit, tu supprime l'index qui est crée automatiquement avec la table catégorie. et tu recrée manuelement.ça devrait passer normalement. j'ai eu ce même souci lorsque je copier directement mes scripts sql généré avec powerAmc.
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
31 oct. 2011 à 15:55
C'est bon, je suis arrivé a supprimer.

Comment fait on pour créer la clé étrangère avec une requête ?

Désolé je ne sais pas comment on fait :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bissdebrazza Messages postés 2065 Date d'inscription vendredi 29 juin 2007 Statut Contributeur Dernière intervention 7 décembre 2017 712
31 oct. 2011 à 16:39
ok,tu te met sur la table produit (la structure), en bas tu veras un tableau "index", tu crée un nouvel index tout en choisissant la colonne concernée. une fois fait,juste en dessous du tableau de la structure de la table produit tu verras "Gestions des relations" tu clique la bas. et dans la page qui apparait, tu verras que tu peux selectionner l'ID de la catégorie. tu déroule le menu et tu choisi un truc de ce genre catégorie--->ID_categorie et tu prend la suppression en cascade et modification aussi.tu valide le tout et tout devrait aller mieux!
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
31 oct. 2011 à 16:47
Rhaa mais c'est pas vrai, j'ai toujours ce p... de message.

erreur sq: Cannot add or update a child row: a foreign key constraint fails ('images'.'images', CONSTRAINT 'images_ibfk_2' FOREIGN KEY ('ID_image') REFERENCES 'images' ('categorie_id') ON DELETE CASCADE ON UPDATE CASCADE)

Bon sang j'suis nul ou quoi, ça doit pas être la folie de lier deux tables quoi lol
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
31 oct. 2011 à 16:54
Quand je fais un echo de $categorie pour voir, il me sort:

id #6

Alors que l'id est censé être 1 :(
0
bissdebrazza Messages postés 2065 Date d'inscription vendredi 29 juin 2007 Statut Contributeur Dernière intervention 7 décembre 2017 712
31 oct. 2011 à 16:55
tes deux tables ont des enregistrements? car si ta table produit est vide, tu ne peux pas supprimer une catégorie car dans sa suppression il ne trouveras pas l'ID correspondant dans l'autre table.
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
31 oct. 2011 à 17:07
J'arrive deja à insérer un enregistrement a partir de phpmyadmin.

J'ai bien la liste déroulante avec les catégories dans la clé étrangère, déja ça.

Je pense que le dernier soucis, c'est qu'il ne me renvoie pas la bonne ID non ?

Il me renvoie un 6 alors que je n'ai que 1, 12 et 13 en ID_catégorie.
0
bissdebrazza Messages postés 2065 Date d'inscription vendredi 29 juin 2007 Statut Contributeur Dernière intervention 7 décembre 2017 712
31 oct. 2011 à 17:08
regarde bien tes enregistrements
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
Modifié par TRUNCKS le 31/10/2011 à 17:18
Tu crois que ma requête est fausse ?

Je cécupère le nom_catégorie à partir d'une liste déroulante, je demande l'ID est j'enresgistre.

J'ai manqué quelque chose ?

 $nom_categorie = mysql_real_escape_string($_POST['nom_categorie']); 
  
 $requete_cat = "SELECT ID_categorie 
 FROM categories 
 WHERE nom_categorie = '$nom_categorie'"; 
      
 //exécution de la requête: 
 $categorie = mysql_query($requete_cat) or die( mysql_error()); 


  $sq = "INSERT INTO images VALUES('','$titre_image','$titre_image2','$texte_image','$texte_image2','$nFile','$categorie')";  
  $quer = mysql_query($sq) or die('erreur sq: '.mysql_error()); 
0