Tables liées

Signaler
Messages postés
9
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
28 février 2008
-
Messages postés
9
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
28 février 2008
-
Bonjour,
J'apprend en construisant et à chaque saut de puce je tombe dans un gouffre ! Pouvez-vous me sortir de celui-là ?
J'ai trois tables  la troisième (livres) utilisant des données de deux autres (editeurs et matieres)

CREATE TABLE `livres` (
  `id` tinyint(5) NOT NULL auto_increment,
  `id_matiere` tinyint(5) NOT NULL default '0',
  `titre` varchar(50) NOT NULL default '',
  `id_editeur` tinyint(5) NOT NULL default '0',
  `annee` varchar(40) NOT NULL default '',
  `reference` varchar(10) NOT NULL default '',
  `isbn` varchar(10) NOT NULL default '',
  `commentaires` tinytext NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id_matiere` (`id_matiere`),
  KEY `id_editeur` (`id_editeur`)
) TYPE=InnoDB AUTO_INCREMENT=1 ;


-- Contraintes pour la table `livres`

ALTER TABLE `livres`
  ADD CONSTRAINT `livres_ibfk_1` FOREIGN KEY (`id_matiere`) REFERENCES `matieres` (`id_matiere`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `livres_ibfk_2` FOREIGN KEY (`id_editeur`) REFERENCES `editeurs` (`id_editeur`) ON DELETE CASCADE ON UPDATE CASCADE;


Je n'arrive pas à enregistrer mes données avec
msql_query("INSERT INTO livres VALUES ('','$id_matiere',$titre','$id_editeur',$annee','',$reference','$isbn','$commentaires')");


Je pense que c'est dû à ma table livres qui ne doit pas être configurée correctement car toutes mes variables existent bien (confirmées par echo).

Qu'est-ce que je n'ai pas compris ?
Merci beaucoup

LoumirLoumir

9 réponses

Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
Salut,

Met : msql_query("INSERT INTO livres VALUES ('','$id_matiere',$titre','$id_editeur',$annee','',$reference','$isbn','$commentaires')") or die(mysql_error());
et ensuite si tu obtient une erreur met la nous, et peut être que l'on y verra plus clair !!!

Si t'a besoin d'aide, MP !!!
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello, si tes variables existent bien, c'est sans doute que tu violes une clé étrangère (éditeur ou matière correspondants inexistants).
à+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Tu as aussi fait une faute là : eur',$annee','',$ref

tu devrais aussi préciser dans quels champ tu insères tes valeurs, sinon dès que tu rajouteras un champ dans ta table, faudra refaire toutes tes requêtes.

à+
Messages postés
9
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
28 février 2008

Merci pour vos réponses et vos conseils, j'en tiendrai compte.

 J'ai corrigé le champ en trop. Les tables et champs liés existent bien (les listes déroulantes issues des tables fonctionnent)

Il reste une erreur :  You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '18ème siècle','1',2007',128327','','')' at line 1

Ca n'est pas très explicite !

LoumirLoumir
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
c'est ce que je t'ai dit, il manque une apostrophe.
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
'18ème siècle','1','2007','128327','','')'

Si t'a besoin d'aide, MP !!!
Messages postés
9
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
28 février 2008

Merci je l'avais pourtant lu et relue cette ligne !
Cette fois c'est bien ma table qui pose problème : "Cannot add or update a child row: a foreign key constraint fails"

La table principale fait référence aux clés étrangères. Les tables annexes doivent-elles également en parler ? Ce qui n'est pas le cas dans mon exemple :


CREATE TABLE `peep_editeurs` (
  `id_editeur` tinyint(5) NOT NULL auto_increment,
  `editeur` varchar(30) default NULL,
  PRIMARY KEY  (`id_editeur`)
) TYPE=InnoDB AUTO_INCREMENT=7 ;


LoumirLoumir
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello, ta table est censée s'appeler editeurs d'après ta clé étrangère, pas peep_editeurs.
Fais attention à ce que tu fais, et relis-toi 2 fois avant de poser tes questions :)
à+
Messages postés
9
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
28 février 2008

J'ai renomé mes tables pour présenter mon problème sur ce forum mais j'ai laissé passé celle là. Dans mon projets les noms sont corrects. J'ai bien entendu vérifié.
Merci quand même.

LoumirLoumir