Tables liées

Loumir Messages postés 9 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 28 février 2008 - 27 févr. 2008 à 16:26
Loumir Messages postés 9 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 28 février 2008 - 28 févr. 2008 à 17:57
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

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 févr. 2008 à 16:32
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 !!!
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 16:42
Hello, si tes variables existent bien, c'est sans doute que tu violes une clé étrangère (éditeur ou matière correspondants inexistants).
à+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 16:44
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.

à+
0
Loumir Messages postés 9 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 28 février 2008
27 févr. 2008 à 17:57
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
0

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

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 18:20
c'est ce que je t'ai dit, il manque une apostrophe.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 févr. 2008 à 19:51
'18ème siècle','1','2007','128327','','')'

Si t'a besoin d'aide, MP !!!
0
Loumir Messages postés 9 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 28 février 2008
27 févr. 2008 à 19:52
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
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
28 févr. 2008 à 14:45
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 :)
à+
0
Loumir Messages postés 9 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 28 février 2008
28 févr. 2008 à 17:57
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
0
Rejoignez-nous