Problème avec foreign key

Fermé
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 27 mai 2016 à 12:00
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 31 mai 2016 à 15:04
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 !
<?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:

5 réponses

jordane45 Messages postés 38370 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 janvier 2025 4 722
27 mai 2016 à 15:55
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....)



0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
27 mai 2016 à 16:13
message c'est ça Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
0
jordane45 Messages postés 38370 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 janvier 2025 4 722
Modifié par jordane45 le 27/05/2016 à 16:16
Donc AUCUN rapport avec la FOREIGN KEY comme le titre de ta question le laisse présumer......

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.....
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
27 mai 2016 à 16:33
laquelle?
0
jordane45 Messages postés 38370 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 janvier 2025 4 722
27 mai 2016 à 18:48
Le plus simple lorsque tu as un souci comme celui-là... c'est :
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.
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
Modifié par delavega470 le 31/05/2016 à 13:34
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.
0

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

Posez votre question
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
31 mai 2016 à 15:04
quand je met les valeurs ça passe!
0