Problème avec foreign key
delavega470
Messages postés
298
Date d'inscription
Statut
Membre
Dernière intervention
-
delavega470 Messages postés 298 Date d'inscription Statut Membre Dernière intervention -
delavega470 Messages postés 298 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous je veux insérer des valeurs dans la table local mais ma table local contient un foreign key qui id_service de la table service.
Je fais un insert into mais cela ne marche pas pourriez-vous me donner un coup de main svp merci !
Je fais un insert into mais cela ne marche pas pourriez-vous me donner un coup de main svp merci !
<?php include 'entete.php'; ?><img src="../img/formation.jpg"> <div align="center" class="row"> <div class="col-lg-4"> <div class="panel panel-default"> <div class="panel-heading"> ENREGISTREMENT DES LOCAUX DU CHU </div> <div class="panel-body"> <p> <form method='post' name="#"> <label>Désignation: <font color="red"><em>* </em></font></label> <input type="text" id="local" name="local" placeholder="PC secretaire 1" ></br> </p> <p> <a href="#" style="text-decoration:none;"> <input name="valider" type="submit" value="Enregistrer"></a> </p> </form> <?php if(isset($_POST['valider'])) { $local=addslashes($_POST['local']); // Connexion a la base de Données try { $bdd= new PDO('mysql:host=localhost; dbname=gestpiece', 'root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } // cas d'erreur catch(Exception $e) { die('Erreur:'.$e->getMessage()); } // Vérification de l'element existant $req = $bdd->prepare('SELECT * FROM local WHERE nom_local = :local'); $req->execute(array( 'local' => $local)); $resultat =$req->fetch(); if ($resultat) { echo '<h3>Ce local existe déjà!<img src="../img/surprised.gif"></h3><br>'; } else { $sql = " INSERT INTO local (id_local,nom_local) values ( SELECT id_service FROM service WHERE nom_service= :nom_service),:nom_local "; $datas = array('id_service'=>$resultat['id_service'] ,':nom_local'=>$local); //on exécute la requête try { $prepare = $bdd->prepare($sql); $reponse = $prepare->execute($datas); echo 'local ajouté!'; } catch(Exception$e) { //en cas de souci dans la requete echo "Erreur ! ". $e->getMessage(); } //echo '<h3>Nouveau local ajouté <img src="../img/check.png"> </h3>'; } } ?>
A voir également:
- Problème avec foreign key
- Key windows 10 - Guide
- Wic reset key 16 characters free ✓ - Forum Imprimante
- Show key plus - Télécharger - Utilitaires
- Press the esc key for startup menu - Forum Matériel & Système
- Fichier .key ✓ - Forum MacOS
5 réponses
Bonjour,
1 - Quel est le message d'erreur EXACT ?
2 - Prend l'habitude de placer ton code php (tout ce qui est traitement des données comme les SELECT ou les INSERT...) AVANT ton code html. cela rend le code de la page plus simple à lire.
3- As tu testé DIRECTEMENT dans ta BDD la requête pour voir ce que ça donne ? (car là.. ton souci n'est pas vraiment lié au PHP.. mais plus à tes requêtes et à leur utilisation....)
1 - Quel est le message d'erreur EXACT ?
2 - Prend l'habitude de placer ton code php (tout ce qui est traitement des données comme les SELECT ou les INSERT...) AVANT ton code html. cela rend le code de la page plus simple à lire.
3- As tu testé DIRECTEMENT dans ta BDD la requête pour voir ce que ça donne ? (car là.. ton souci n'est pas vraiment lié au PHP.. mais plus à tes requêtes et à leur utilisation....)
message c'est ça Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Donc AUCUN rapport avec la FOREIGN KEY comme le titre de ta question le laisse présumer......
Regarde bien ce que tu as écris :
C'est quoi ce bout de ligne : ,:nom_local que tu as inséré après les VALUES de ta requête ??
EDIT : Ah non.. c'est juste ta parenthèse de fin qui est mal placée visiblement.....
Regarde bien ce que tu as écris :
$sql = " INSERT INTO local (id_local,nom_local) values ( SELECT id_service FROM service WHERE nom_service= :nom_service),:nom_local "; $datas = array('id_service'=>$resultat['id_service'] ,':nom_local'=>$local);
C'est quoi ce bout de ligne : ,:nom_local que tu as inséré après les VALUES de ta requête ??
EDIT : Ah non.. c'est juste ta parenthèse de fin qui est mal placée visiblement.....
Le plus simple lorsque tu as un souci comme celui-là... c'est :
1 - Faire un echo de la requête
2 - Copier ce qui s'affiche (grace au echo donc) et le coller directement dans ton phpMyadmin (dans l'onglet "sql") en prenant bien le soin de remplacer les variables (celles qui commencent par les deux points comme :nom_service et :nom_local par de vraies valeur (sans oublier des les mettre entre quotes).
Le fait de tester en DIRECT dans ta BDD les requêtes te permettra d'obtenir des informations sur les éventuelles erreurs que tu aurais pu faire en les écrivant.
NB: Pense aussi à systématiquement mettre les deux points ":" devant les noms des variables dans l'array data.
c'est préférable.
1 - Faire un echo de la requête
$sql = " INSERT INTO local (id_local,nom_local) values ( SELECT id_service FROM service WHERE nom_service= :nom_service),:nom_local "; echo "<br>La requete est :".$sql;
2 - Copier ce qui s'affiche (grace au echo donc) et le coller directement dans ton phpMyadmin (dans l'onglet "sql") en prenant bien le soin de remplacer les variables (celles qui commencent par les deux points comme :nom_service et :nom_local par de vraies valeur (sans oublier des les mettre entre quotes).
Le fait de tester en DIRECT dans ta BDD les requêtes te permettra d'obtenir des informations sur les éventuelles erreurs que tu aurais pu faire en les écrivant.
NB: Pense aussi à systématiquement mettre les deux points ":" devant les noms des variables dans l'array data.
$datas = array(':id_service'=>$resultat['id_service'] ,':nom_local'=>$local);
c'est préférable.
en fait j'ai fait un formulaire service avec nom service et ensuite je viens de faire un autre formulaire avec local contenant nom du local , j'avoue que je suis un peu perdu ,es ce que c'est une bonne méthode? et en plus il des données dans ma table service et rien dans ma table local.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question