Probleme Insertion MYSQL

Résolu/Fermé
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008 - 9 mai 2008 à 11:47
 Utilisateur anonyme - 9 mai 2008 à 16:39
Bonjour,

Voila je suis sur un projet de gestion de salarié avec EasyPHP.
J'ai créé un formulaire d'ajout de nouveaux salariés avec tous les champs, et derrière les données sont envoyés dans ma base MYSQL.
Le soucis que je rencontre c'est que je n'arrive pas à remplir toutes les tables.
Je m'explique (exemple avec trois tables), j'ai donc ma table "salarie" (ID_Salarie, Nom_Salarie, Prenom_Salarie etc...)avec toutes les infos personnelles concernant le nouveau salarié qui est rempli automatiquement après la validation du formulaire une table "diplome" dans laquelle se trouve déjà des enregistrements (ID_Diplome, Libelle_Diplome) BAC ou moins, BAC +2 ou plus, BAC +5 ou plus et une troisieme table "relation_1" qui est censée faire la jointure entre les tables "salarie" et "diplome" dans laquelle on retrouve ID_Salarie et ID_Diplome. Toutes ces tables sont en InnoDB et dans la table relation_1 dans "gestion des relations" j'ai bien précisé les relations c-a-d ID_Diplome relié à la table "diplome" et ID_Salarie relié à la table"salarie".

Donc je voudrais que lorsque l'on valide le formulaire(où on précise le diplôme avec un select) on aille chercher dans la table "diplome" l'ID correspondant au diplôme que l'on a renseigné et l'ID du salarie qui vient d'être ajouté pour les enregistrer dans la table relation_1. Je vous montre ce que j'ai fait:

$sql_1 = mysql_query("SELECT ID_Diplome FROM diplome WHERE Libelle_Diplome LIKE '$Libelle_Diplome'") or die ("Impossible_1 car".mysql_error().".");
$ID_Diplome = mysql_fetch_array ($sql_1);

$resultat_1 = mysql_query("INSERT INTO salarie VALUES ('', '$Civilite_Salarie', '$Nom_Salarie', '$Nom_JeuneFille_Salarie', '$Prenom_Salarie', '$Date_Naissance_Salarie', '$Pays_Naissance_Salarie', '$Ville_Naissance_Salarie', '$Nationalite_Salarie', '$Num_Secu_Salarie', '$Nombre_Enfant_Salarie', '$Adresse_Salarie', '$Ville_Salarie', '$Code_Postal_Salarie', '$Telephone_Fixe_Salarie', '$Telephone_Portable_Salarie', '$Date_Entree_Salarie', '$Date_Sortie_Salarie')") or die ("Impossible_2 car".mysql_error().".");
$sql_2= mysql_query("SELECT ID_Salarie FROM salarie WHERE Nom_Salarie LIKE '$Nom_Salarie' AND Prenom_Salarie LIKE '$Prenom_Salarie'");
$ID_Salarie = mysql_fetch_array($sql_2);

$resultat_2 = mysql_query("INSERT INTO relation_1 VALUES ('$ID_Diplome', '$ID_Salarie) ") or die ("Impossible_3 car".mysql_error().".");

or cela ne marche pas il 'affiche le message suivant:

Impossible_3 carImpossible d'ajouter un enregistrement fils : une constrainte externe l'empèche.

Si quelqu'un a une idée de l'erreur cela m'aiderait beaucoup, merci d'avance.
            
                
A voir également:

4 réponses

Utilisateur anonyme
9 mai 2008 à 15:15
Salut,
je n'ai pas tout lu mais la dernière ligne :
$resultat_2 = mysql_query("INSERT INTO relation_1 VALUES ('$ID_Diplome', '$ID_Salarie) ") or die ("Impossible_3 car".mysql_error().".");
il te manque un ' deriere '$ID_Salarie

karando
0
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008
9 mai 2008 à 15:28
Merci de me l'avoir fait remarquer, mais le problème ne vient pas de la.
0
Utilisateur anonyme
9 mai 2008 à 15:45
Bon la j'ai relu :
Je pense que tu peux essayer ca :

$req1="SELECT ID_Diplome FROM diplome WHERE Libelle_Diplome LIKE '$Libelle_Diplome'";
$sql_1 = mysql_query($req1);
$ID_Diplome_result = mysql_fetch_array ($sql_1);
$ID_Diplome= $ID_Diplome_result["ID_Diplome"];

$reqresultat1="INSERT INTO salarie VALUES ('', '$Civilite_Salarie', '$Nom_Salarie', '$Nom_JeuneFille_Salarie', '$Prenom_Salarie', '$Date_Naissance_Salarie', '$Pays_Naissance_Salarie', '$Ville_Naissance_Salarie', '$Nationalite_Salarie', '$Num_Secu_Salarie', '$Nombre_Enfant_Salarie', '$Adresse_Salarie', '$Ville_Salarie', '$Code_Postal_Salarie', '$Telephone_Fixe_Salarie', '$Telephone_Portable_Salarie', '$Date_Entree_Salarie', '$Date_Sortie_Salarie')";
//les insertion tu recupere rien
mysql_query($reqresultat1);

//ici je ferai un 
$ID_SALARIE = mysql_insert_id();

//sinon tu as fait
$req2="SELECT ID_Salarie FROM salarie WHERE Nom_Salarie LIKE '$Nom_Salarie' AND Prenom_Salarie LIKE '$Prenom_Salarie'";
$sql_2= mysql_query($req2);

$ID_Salarie_result = mysql_fetch_array($sql_2);
$ID_Salarie = $ID_Salarie_result["ID_Salarie"];

$req_resutlat2= "INSERT INTO relation_1 VALUES ('$ID_Diplome', '$ID_Salarie') ";
//les insertion tu recupere rien
mysql_query($req_resutlat2);



Essaye ca pour voir.
0
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008
9 mai 2008 à 16:13
Bon je viens de tester avec ta méthode et il m'affiche le même message d'erreur.
Alors je me demande si le problème ne vient pas de ma base.
J'ai pourtant bien mis dans l'interface de gestion de phpMyAdmin les relations entre les tables. C-a-d de la table relation_1 vers diplome et vers salarie. Mais faut-il faire une relation dans le sens diplome -> relation_1, et salarie -> relation_1.
J'ai bien indexé dans la table relation_1 les deux champs ID_Diplome avec la clé primaire ID_Diplome de la table diplome et ID_Salarie avec la clé primaire ID_Salarie de la table salarie. Toutes mes tables sont en InnoDB.
0
Utilisateur anonyme
9 mai 2008 à 16:21
Au fait je voulais savoir pourquoi tu veux du innoDb car MyISAM est plus fiable.

Je m'explique le MyISAM ca ecrit dans des fichiers que tu peut transporter le innoBd ben si tu viande ton ordi tu perd tout. Et je certifie ca m'est deja arriver.

Apres pour les relations j'en ai jamais fais dans une mysql.

Alors La je sais pas trop quoi te dire.

Bon courage...
0
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008
9 mai 2008 à 16:29
Ben car le MyISAM ne prend pas en charge l'indexation, c-a-d la gestion de clés étrangères.
En tous les cas merci quand même.
0
Utilisateur anonyme
9 mai 2008 à 16:39
Ce que je fais en myisam si je dois faire des tables lier je fais souvent des index(champs) et definit dans la table comme ca il sont indexer par les id inserer :

par exemple :
CREATE TABLE `t_client` (
  `cli_id` smallint(3) unsigned NOT NULL auto_increment,
  ...
  `cli_valide` tinyint(1) NOT NULL default '1',
  ...
  `city_id` tinyint(2) unsigned NOT NULL default '0',
...
  PRIMARY KEY  (`cli_id`),
  KEY `city_id` (`city_id`),
  KEY `cli_valide` (`cli_valide`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=473 ;


J'ai defini une clé pour city_id qui est ma clé primaire dans la table t_city.

Je pense que toi tu veux faire une table avec deux clé comme ca. tu pourrais faire un truc du genre :
Create table relation_1 (
ID_Diplome tinyint(3) ,
ID_Salarie tinyint(3),
KEY `relation` (`ID_Diplome`,`ID_Salarie`)
)Engine MyISAM;


Enfin a voir.

Allez bon courage.
0