SQL Soucis clé étrangère
TRUNCKS
Messages postés
1019
Date d'inscription
Statut
Membre
Dernière intervention
-
TRUNCKS Messages postés 1019 Date d'inscription Statut Membre Dernière intervention -
TRUNCKS Messages postés 1019 Date d'inscription Statut Membre Dernière intervention -
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)
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:
- SQL Soucis clé étrangère
- Clé usb non détectée - Guide
- Clé windows 8 - Guide
- Formater clé usb - Guide
- Clé usb - Accueil - Stockage
- Clé bootable windows 10 - Guide
11 réponses
Bonjour!
Catégorie ( ID_catégorie (primaire), nom_categorie ) Produits ( ID_produit (primaire), nom produit, ID_categorie(clé étrangère) )
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:
Et je récupère comme ça:
Ensuite, j'enregistre l'id dans la base.
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.
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.
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.
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 :(
Comment fait on pour créer la clé étrangère avec une requête ?
Désolé je ne sais pas comment on fait :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!
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
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
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.
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.
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.
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 ?
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());