Erreur : a foreign key constraint fails !!!!

cs_vinz78 Messages postés 207 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 24 juillet 2007 - 21 juin 2007 à 10:58
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012 - 24 juin 2012 à 20:12
-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeu 21 Juin 2007 à 10:53
-- Version du serveur: 4.1.9
-- Version de PHP: 5.2.2

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `projet`
--

-- --------------------------------------------------------

--
-- Structure de la table `adresse`
--

CREATE TABLE `adresse` (
  `id_adresse` bigint(20) NOT NULL auto_increment,
  `telephone` varchar(20) NOT NULL default '',
  `email` text NOT NULL,
  `fax` varchar(20) NOT NULL default '',
  `rue_adr` text NOT NULL,
  `numrue_adr` varchar(20) NOT NULL default '',
  `cp_adr` varchar(20) NOT NULL default '',
  `ville_adr` varchar(20) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_adresse`),
  KEY `FK_adresse` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `adresse`
--

-- --------------------------------------------------------

--
-- Structure de la table `baseteams`
--

CREATE TABLE `baseteams` (
  `Matricule` bigint(20) NOT NULL,
  `type_bt` varchar(20) NOT NULL default '',
  `profil_bt` varchar(20) NOT NULL default '',
  `versionTEAMS` varchar(20) NOT NULL default '',
  `versionCOMPANION` varchar(20) NOT NULL default '',
  `versionCALLREPORT` varchar(20) NOT NULL default '',
  `reseau` varchar(20) NOT NULL default '',
  `repertoire` varchar(50) NOT NULL default '',
  `fonction` varchar(50) NOT NULL default '',
  `nbacces` varchar(20) NOT NULL default '',
  `license_pervasive` varchar(20) NOT NULL default '',
  `typeinst` varchar(50) NOT NULL default '',
  `nomaccesTEAMS` varchar(50) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`Matricule`),
  KEY `FK_baseteams` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `baseteams`
--

-- --------------------------------------------------------

--
-- Structure de la table `connexion`
--

CREATE TABLE `connexion` (
  `id_connex` bigint(20) NOT NULL auto_increment,
  `dialer` varchar(20) NOT NULL default '',
  `version` varchar(20) NOT NULL default '',
  `autre_dialer` text NOT NULL,
  `utilisation_interco` varchar(20) NOT NULL default '',
  `nom_host` varchar(20) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_connex`),
  KEY `FK_connexion` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `connexion`
--

-- --------------------------------------------------------

--
-- Structure de la table `contact`
--

CREATE TABLE `contact` (
  `id_contact` bigint(20) NOT NULL,
  `nom_cont` varchar(20) NOT NULL default '',
  `prenom_cont` varchar(20) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_contact`),
  KEY `FK_contact` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `contact`
--

-- --------------------------------------------------------

--
-- Structure de la table `intervention`
--

CREATE TABLE `intervention` (
  `id_int` bigint(20) NOT NULL auto_increment,
  `Numcacao` varchar(20) NOT NULL default '',
  `date_intervention` date NOT NULL default '0000-00-00',
  `Nom_intervenant` varchar(20) NOT NULL default '',
  `description_op` text NOT NULL,
  `rmqint` varchar(20) NOT NULL default '',
  `rmqcontact` varchar(20) NOT NULL default '',
  `heuredeb` time NOT NULL default '00:00:00',
  `heurefin` time NOT NULL default '00:00:00',
  `url_cr` text NOT NULL,
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_int`),
  KEY `FK_intervention` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `intervention`
--

-- --------------------------------------------------------

--
-- Structure de la table `laboratoire`
--

CREATE TABLE `laboratoire` (
  `id_labo` bigint(20) NOT NULL auto_increment,
  `Nomlab` varchar(20) NOT NULL default '',
  `Commercial` varchar(20) NOT NULL default '',
  `Animateur` varchar(20) NOT NULL default '',
  `TC1` varchar(20) NOT NULL default '',
  `TC2` varchar(20) NOT NULL default '',
  `TC3` varchar(20) NOT NULL default '',
  `ATC` varchar(20) NOT NULL default '',
  `Pays` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `laboratoire`
--

-- --------------------------------------------------------

--
-- Structure de la table `machine`
--

CREATE TABLE `machine` (
  `id_mat` bigint(20) NOT NULL auto_increment,
  `marque` varchar(20) NOT NULL default '',
  `modele` varchar(20) NOT NULL default '',
  `CPU` varchar(20) NOT NULL default '',
  `RAM` varchar(20) NOT NULL default '',
  `IE` varchar(20) NOT NULL default '',
  `connexion` varchar(20) NOT NULL default '',
  `utilisateur` varchar(20) NOT NULL default '',
  `logiciel` varchar(20) NOT NULL default '',
  `antivirus` varchar(20) NOT NULL default '',
  `precense msxml 6.0` tinyint(1) NOT NULL,
  `precense windows installer 3.1` tinyint(1) NOT NULL,
  `client_VPN` varchar(20) NOT NULL default '',
  `libelle_master` varchar(20) NOT NULL default '',
  `droit_uti` varchar(20) NOT NULL default '',
  `droit_repertoire` varchar(20) NOT NULL default '',
  `droit_basereg` varchar(20) NOT NULL default '',
  `autre_droit` text NOT NULL,
  `autre_mat` text NOT NULL,
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_mat`),
  KEY `FK_machine` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `machine`
--

-- --------------------------------------------------------

--
-- Structure de la table `matsoc`
--

CREATE TABLE `matsoc` (
  `matsoc` bigint(20) NOT NULL,
  `libelle_matsoc` varchar(20) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`matsoc`),
  KEY `FK_matsoc` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `matsoc`
--

-- --------------------------------------------------------

--
-- Structure de la table `resp_cpt`
--

CREATE TABLE `resp_cpt` (
  `id_resp` bigint(20) NOT NULL auto_increment,
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_resp`),
  KEY `FK_resp_cpt` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `resp_cpt`
--

-- --------------------------------------------------------

--
-- Structure de la table `utilisateur`
--

CREATE TABLE `utilisateur` (
  `id_uti` bigint(20) NOT NULL,
  `nom_uti` varchar(20) NOT NULL default '',
  `pren_uti` varchar(20) NOT NULL default '',
  `id_labo` bigint(20) NOT NULL,
  PRIMARY KEY  (`id_uti`),
  KEY `FK_utilisateur` (`id_labo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `utilisateur`
--

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `adresse`
--
ALTER TABLE `adresse`
  ADD CONSTRAINT `FK_adresse` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `baseteams`
--
ALTER TABLE `baseteams`
  ADD CONSTRAINT `FK_baseteams` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `connexion`
--
ALTER TABLE `connexion`
  ADD CONSTRAINT `FK_connexion` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `contact`
--
ALTER TABLE `contact`
  ADD CONSTRAINT `FK_contact` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `intervention`
--
ALTER TABLE `intervention`
  ADD CONSTRAINT `FK_intervention` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `machine`
--
ALTER TABLE `machine`
  ADD CONSTRAINT `FK_machine` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `matsoc`
--
ALTER TABLE `matsoc`
  ADD CONSTRAINT `FK_matsoc` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `resp_cpt`
--
ALTER TABLE `resp_cpt`
  ADD CONSTRAINT `FK_resp_cpt` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Contraintes pour la table `utilisateur`
--
ALTER TABLE `utilisateur`
  ADD CONSTRAINT `FK_utilisateur` FOREIGN KEY (`id_labo`) REFERENCES `laboratoire` (`id_labo`) ON DELETE CASCADE ON UPDATE CASCADE;

-------------------------------------------------------------------------------------------------------

Voila ma base de données sa fait 5000 fois que je la refais toujours cette erreur si quelqun peut prendre le temps de regarder mes contraintes pour voir ce qui va pas merci !

18 réponses

dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 11:30
Bonjour,
Quand as-tu cette erreur ?
Lors de l'insertion ?
Montre ton ordre d'insertion ...

Ta table Laboratoire est elle vide ? Si oui, tu ne peux rien insérer dans les autres tables ....

Dom
0
cs_vinz78 Messages postés 207 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 24 juillet 2007
21 juin 2007 à 11:46
J'ai effectivement cette erreur lors de l'insertion

requête SQL: 

INSERTINTO`projet`.`contact`(
`id_contact`,
`nom_cont`,
`prenom_cont`,
`id_labo`
)
VALUES(
'4545','nomtest','prenomtest','1'
)

MySQL a répondu:

#1216 - Cannot add or update a child row: a foreign key constraint fails

j'ai fais un test en remplissant ma table labo l'auto increment a mis 1 pour  id_labo mais sa na rien changé 
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 11:49
Id_Labo est déclaré en BigInt ...
l'ordre ne serait pas plutôt
VALUES(
'4545','nomtest','prenomtest',1
)  ?

Dom
0
cs_vinz78 Messages postés 207 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 24 juillet 2007
21 juin 2007 à 12:01
j'ai mi id labo en big int vu qu'il est en auto increment et que je ne connais pas le nombre d'insertion total  je vais essayer lordre d'insertion mais je pense que sa va etre pareil au final vu que c'est phpmyadmin qui ma retourné cette requete
0

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

Posez votre question
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 13:59
As-tu essayé le 1 (id_labo)  sans apostrophe ?
Dom
0
cs_vinz78 Messages postés 207 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 24 juillet 2007
21 juin 2007 à 15:02
ouai mais je vien de me rendre compte que kan j'ai 1 pour id_labo dan laboratoire mes insertion marchent dan les autre table quand leur id_labo est a 1 aussi  hors vu que c'est un champs en auto incrémentation et que les autres non je ne vois pas comment faire
je peux dire a l'utilisateur de saisir le meme id labo a chaque fois  mais c'est assé complique car il devra savoir quel nombre a id_labo comme occurence tout le temps. Je suis assé perdu la
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 15:44
C'est le principe de la clef etrangere .
Dans toutes les tables où tu as définis des clefs étrrangères, lors de l'insertion de ligne dans celles-ci, la valeur qui fera référence à la clef étrangère devra exister dans la table Parent (ici Laboratoire) ....
C'est pourquoi tu dois créer les laboratoires dont tu as besoins avant d'insérer quoi que ce soit dans les autres tables.

Peut être que tu peux procéder autrement (revoir tes tables et contraintes) mais je ne connais pas ton cahier des charges ...

Dom
0
cs_vinz78 Messages postés 207 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 24 juillet 2007
21 juin 2007 à 16:39
Merci je vais essayer de faire en sorte que les labos soient insérés en premier parceque la j'essayai de tout insérer d'un seul coup.
Bonne soirée =)
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
20 juin 2012 à 11:32
create table ADMINISTRATEUR
(
ID int not null,
LOGIN varchar(30),
PASS varchar(30),
NOM varchar(30),
PRENOM varchar(30),
PRIVILAGE varchar(30),
primary key (ID)
);
create table CLIENTS
(
ID_CLIENT int not null,
ID int not null,
NOM_CLIENT varchar(255),
EMAIL_CLIENT varchar(30),
PASS_CLIENT numeric(8,0),
TEL_CLIENT numeric(8,0),
FAX int,
ADRESSE varchar(255),
NATURE_CLIENT varchar(50),
primary key (ID_CLIENT)
);
Voila ma base de données sa fait 5000 fois que je la refais toujours cette erreur si quelqun peut prendre le temps de regarder mes contraintes pour voir ce qui va pas merci !



voila c'est l'ereur
Cannot add or update a child row: a foreign key constraint fails (`ifat2/clients`, CONSTRAINT `FK_ADMIN_CLIENT` FOREIGN KEY (`ID`) REFERENCES `administrateur` (`ID`))


J'ai effectivement cette erreur lors de l'insertion
$req=("insert into clients values(NULL,'".$ID_CLIENT."','".$NOM_CLIENT."','".$EMAIL_CLIENT."','".$PASS_CLIENT."','".$TEL_CLIENT."','".$FAX."','".$ADRESSE."','".$NATURE_CLIENT."')")
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juin 2012 à 12:16
Salut,

la valeur contenue dans $ID_CLIENT ne doit pas correspondre à un ID existant dans ta table ADMINISTRATEUR.
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
20 juin 2012 à 15:25
merci
mais dans la partit insert into comment fait ???
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juin 2012 à 15:48
Je comprends pas bien la question.

J'ai pas vérifié la syntaxe de ta requête, mais si tu as cette erreur c'est qu'elle doit être bonne. Un champ clé étrangère doit contenir une valeur qui existe dans la table externe qu'il référence, c'est là-même le principe.

Si tu veut insérer une ligne sans connaitre à l'avance cette valeur alors il faut que tu déclares ton champ clé étrangère en NULLABLE, et que tu insères ta ligne avec NULL comme valeur pour ce champ.
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
20 juin 2012 à 15:55
ok merci
je doit insérer la ligne avec NULL mais il ne fonctionne pas voila le code .
<?php
$ID_CLIENT=$_POST['ID_CLIENT'];
$ID=$_POST['ID'];
$NOM_CLIENT=$_POST['NOM_CLIENT'];
$EMAIL_CLIENT=$_POST['EMAIL_CLIENT'];
$PASS_CLIENT=$_POST['PASS_CLIENT'];
$TEL_CLIENT=$_POST['TEL_CLIENT'];
$FAX=$_POST['FAX'];
$ADRESSE=$_POST['ADRESSE'];
$NATURE_CLIENT=$_POST['NATURE_CLIENT'];
$test=0;
if(empty($ID_CLIENT) || empty($ID) || empty($NOM_CLIENT)|| empty($EMAIL_CLIENT)|| empty($PASS_CLIENT) || empty($TEL_CLIENT) || empty($FAX) || empty($ADRESSE)|| empty($NATURE_CLIENT))
{?>




<?php
echo "Vous devez remplir tout les champs";
$test=1;
}
if ($test==0)
{
$res=mysql_query("insert into clients values(NULL,NULL,'".$NOM_CLIENT."','".$EMAIL_CLIENT."','".$PASS_CLIENT."','".$TEL_CLIENT."','".$FAX."','".$ADRESSE."','".$NATURE_CLIENT."')")or die(mysql_error());
if($res)
{
print ("<script language = "JavaScript">");
print ("location.href='listeclient.php';");
print ("</script>");
}
else
{?>




<?php
echo "Verifiez la validite les donnees que vous avez inserer";
?>




<?php
}
}
?>
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
20 juin 2012 à 15:56
pleez me aider j'ia un projet et moi je ne terminer pas .
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juin 2012 à 16:11
Tu as bien défini ton champ clé étrangère en NULLABLE ? Quelle est l'erreur ?
(et pense à utiliser les balise code pour le rendre lisible).
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
20 juin 2012 à 16:18
l'ereur est qunad je remlor le champ j'ai cette message
Vous devez remplir tout les champsCannot add or update a child row: a foreign key constraint fails (`ifat2/clients`, CONSTRAINT `FK_ADMIN_CLIENT` FOREIGN KEY (`ID`) REFERENCES `administrateur` (`ID`))
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juin 2012 à 16:27
Toujours la même erreur, donc tu n'as pas rendu ton champ NULLABLE ...
0
wxcqsd Messages postés 6 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 24 juin 2012
24 juin 2012 à 20:12
slm qui peut me aidez mois pleez tres important

<?php require_once('database.php');
$datab = new database();
$datab = database::accesDb();
$datab->connect();
?>
<?php
if(isset($_POST) ) {
extract($_POST);
// on recupère le password de la table qui correspond au login du client
$sql = "select * from clients where EMAIL_CLIENT='".$EMAIL_CLIENT."' and PASS_CLIENT='".$PASS_CLIENT."'";
$req = mysql_query($sql) or die('error');
$data = mysql_fetch_assoc($req);
if($data['PASS_CLIENT'] != $PASS_CLIENT)
{
?>
<script language="JavaScript">
alert("Le login ou le mot de passe que vous avez saisie est erroné. Merci de recommencer");
window.location.replace("index.php");// On inclut le formulaire d'identification
</script>
<?php
//Une fenêtre d'alerte s'affiche lorsque le login ou le mot de passe est invalide et renvoit vers la page pour se logger
}
else {
//session_start(); //on démarre une session
$_SESSION['EMAIL_CLIENT'] = $EMAIL_CLIENT; //la variable de session $_SESSION['login'] récupère le login saisi
print ("<script language = "JavaScript">");
print ("location.href='formation.php';");
print ("</script>");// lien vers la page d'accueil de l'espace privé

}
?>
<script language="JavaScript">
alert("Vous avez oublié de remplir un champ. Merci de recommencer");
window.location.replace("index.php");
</script>
<?php
//Une fenêtre d'alerte s'affiche lorsque le login ou le mot de passe est vide et renvoit vers la page pour se logger
}
?>
voila la code de authentification d'un client ne fonctionne pas
0