Bonjour,
Voila je rencontre un petit problème avec mon code.
Je voulais inserer dans ma table "mission" des données provenant des autres tables à l'aide des "clès etrangères"
<h1 class="page-header">Nouvelle mission</h1>
<?php
$matricule = $bdd->query('SELECT vehicule.immatricule as matricule FROM vehicule ');
$nom_chauf = $bdd->query('SELECT nim_permis,nom FROM chauffeur ');
echo "<form class='form-signin' method='post' action='parc_vehicule.php?mission=mission_encours' >";
echo "<table class='table table-bordered'>";
echo "<tr>";
echo "<tr><td>Immatricule</td><td><select class='form-control' name='matricule' >
<option value=''></option>";
while ($donneesAM = $matricule->fetch()){
?>
<option value="<?php $donneesAM['matricule'];?>"><?php echo $donneesAM['matricule'];?></option>
<?php }
echo "</td></select>";
echo "<td>Nom chauffeur</td><td><select class='form-control' name='permis' >
<option value=''></option>";
while ($donneeschau = $nom_chauf->fetch()){
?>
<option value="<?php $donneeschau['nom'];?>"><?php echo $donneeschau['nom'];?></option>
<?php }
echo "</td></select></tr>";
echo "<tr><td>Date debut</td><td><input class='form-control' type='text' name='date_debut' /></td>";
echo "<td>Date fin</td><td><input class='form-control' type='text' name='date_fin' /></td></tr>";
echo "<tr><td>etat</td><td><input class='form-control' type='text' name='etat' /></td>";
echo "<td>Detail</td><td><input class='form-control' type='text' name='detail' /></td></tr>";
echo "</table>";
echo "<input class='form-control' type='submit' name='ajouter_mission' value='Enregistrer' />";
echo "</form>";
}
}?>
Ma requete sql:
<?php
if (isset ($_POST['ajouter_mission']) && $_POST['ajouter_mission']=='Enregistrer') {
$matricule=htmlspecialchars($_POST["matricule"]);
$permis=htmlspecialchars($_POST["permis"]);
$date_debut=htmlspecialchars($_POST["date_debut"]);
$date_fin=htmlspecialchars($_POST["date_fin"]);
$etat=htmlspecialchars($_POST["etat"]);
$detail=htmlspecialchars($_POST["detail"]);
//ajouter mission
$reqMi=$bdd->prepare('INSERT INTO mission (id_vehicule,id_chauffeur,date_debut,date_fin,etat,detail) VALUES(:matricule,:permis,:date_debut,:date_fin,:etat,:detail)');
$reqMi->execute(array('matricule'=>$matricule,'permis'=>$permis,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'etat'=>$etat,'detail'=>$detail));
$message="<div class='alert alert-success' role='alert'><strong>La mission a été ajouté avec succès.</strong></div>";
}
?>
Décrivez ici ce que vous cherchez à obtenir
Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (allandikbd
.mission
, CONSTRAINT mission_ibfk_1
FOREIGN KEY (id_vehicule
) REFERENCES vehicule
(immatricule
))' in C:\wamp\www\allandik\parc_vehicule.php:147 Stack trace: #0 C:\wamp\www\allandik\parc_vehicule.php(147): PDOStatement->execute(Array) #1 {main} thrown
Euhh il y a quelques problèmes dans ton code !
Comment sont construites tes tables ?
$reqMi=$bdd->prepare('INSERT INTO mission (id_vehicule,id_chauffeur,date_debut,date_fin,etat,detail) VALUES(:matricule,:permis,:date_debut,:date_fin,:etat,:detail)');
$reqMi->execute(array('matricule'=>$matricule,'permis'=>$permis,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'etat'=>$etat,'detail'=>$detail));
$message="<div class='alert alert-success' role='alert'><strong>La mission a été ajouté avec succès.</strong></div>";
Dans ton insert into, tu attend id_vehicule et ton paramètre est 'matricule'=>$matricule (est ce que c'est l'id de ta table vehicule ?)
Non c'est pas l'id de la table vehicule.
table mission : [id_mission], id_vehicule et id_chauffeur se sont mes clès etrangeres, date_debut , date_fin, etat ,detail .
table chauffeur : [nim_permis],nom,prenom...
table vehicule : [ immatricule],marque...
Normalement si tu veux enregistrer dans ta table mission l'id de véhicule et chauffeur, il faut passer en paramètre ces ID ! (si les champs sont bien des INT)
exemple :
//table article
id_article(int) AI cle unique
id_categorie(int) cle etrangere
nom_article(varchar)
//table categorie
id_categorie(int) AI cle unique
nom_categorie(varchar)
//je vais inserer la categorie dans ma table article, je le recupere en get ($_GET['id'])
$cat = select * from categorie where id_categorie = $_GET['id'] //la syntaxe n'est pas exact (la fleme) mais c'est l'idée $cat = id de la table categorie
$nom_article = $_post['name'] // là j'invente.....
//ensuite une foi que tu as l'ID, tu l'insert
$req = INSERT INTO article (id_categorie, nom_article)
VALUES ($cat, $nom_article);
Là je te donne juste le raisonnement à toi de réfléchir !!!!
Merci j'ai ressolu l'erreur. En faite le problème c'est que mes 2 variables ne reçoivent pas les valeurs : $matricule=htmlspecialchars($_POST["matricule"]); et $permis=htmlspecialchars($_POST["permis"]);
Donc au niveau de mon boucle while, j'ai mis :
""
while ($donneesAM = $matri->fetch()){
echo '<option value="' , $donneesAM['immatricule'] , '">' , stripslashes(htmlentities(trim($donneesAM['immatricule']))) , '</option>';
}
""
Merci et bonne soirée.