Insérer des données avec un champ FK
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un formulaire PHP avec 2 champs input (table "azerty") et une liste déroulante (table "programmation").
Je souhaiterais que ces 3 données viennent s'ajouter dans la table "azerty"
Pour les 2 champs input c'est OK ! En revanche, la table "azerty" contient un champ FK qui correspond à un id d'une valeur de la liste déroulante.
Quelle est le code approprié pour associé l'ID correspondant à la valeur sélectionnée, dans la table "azerty" ?
Merci de votre aide :-)
J'ai un formulaire PHP avec 2 champs input (table "azerty") et une liste déroulante (table "programmation").
Je souhaiterais que ces 3 données viennent s'ajouter dans la table "azerty"
Pour les 2 champs input c'est OK ! En revanche, la table "azerty" contient un champ FK qui correspond à un id d'une valeur de la liste déroulante.
Quelle est le code approprié pour associé l'ID correspondant à la valeur sélectionnée, dans la table "azerty" ?
Merci de votre aide :-)
A voir également:
- Insérer des données avec un champ FK
- Fuite données maif - Guide
- Insérer video powerpoint - Guide
- Insérer signature word - Guide
- Comment insérer des points de suite sur word - Guide
- Insérer liste déroulante excel - Guide
10 réponses
Dans ton formulaire tu n'as pas de champ nommé 'progs_id_progs' comment veux tu initialiser :
$prog=$_POST['progs_id_progs'];
$prog=$_POST['progs_id_progs'];
Bonjour,
La logique d'une liste déroulante dont la clé est un id et où l'on souhaite afficher le libellé en clair, c'est que lors de la constitution de la liste déroulante (donc le php qui fait le select dans la table des valeurs de "programmation"), il faut conserver l'id, caché qui sera renvoyé par le formulaire.
La syntaxe du html généré par le php doit être comme :
Si l'utilisateur choisi java, c'est l'id, 3, qui est envoyé vers la page chargée de l'écriture dans la base.
cdlt
☮ Un étranger, c'est un ami qu'on n'a pas encore rencontré.
La logique d'une liste déroulante dont la clé est un id et où l'on souhaite afficher le libellé en clair, c'est que lors de la constitution de la liste déroulante (donc le php qui fait le select dans la table des valeurs de "programmation"), il faut conserver l'id, caché qui sera renvoyé par le formulaire.
La syntaxe du html généré par le php doit être comme :
<select name="programmation"> <option></option> <option value=1>php <option value=2>asp <option value=3>java </select>
Si l'utilisateur choisi java, c'est l'id, 3, qui est envoyé vers la page chargée de l'écriture dans la base.
cdlt
☮ Un étranger, c'est un ami qu'on n'a pas encore rencontré.
Salut,
Merci pour ta réponse.
Niveau HTML je gère mais c'est plus lors de l'envoi du formulaire.
Dans mon <option> j'ai
Et c'est cet ID que je souhaite ensuite envoyer dans un champ d'une autre table qui n'attend que l'ID "id_progs".
Mon problème concerne l'ajout de cet ID dans une autre table.
Dans mon formulaire de traitement, j'ai des données classiques que j'ajoute comme ceci :
C'est après que ça coince... J'ai essayé des tas de combinaisons mais rien à faire, ça marche pas !
Une piste..?
Merci pour ta réponse.
Niveau HTML je gère mais c'est plus lors de l'envoi du formulaire.
Dans mon <option> j'ai
<option value=" <?php echo $donnees['id_progs']; ?>" name="prog" id="prog"> <?php echo $donnees['prog']; ?></option>
Et c'est cet ID que je souhaite ensuite envoyer dans un champ d'une autre table qui n'attend que l'ID "id_progs".
Mon problème concerne l'ajout de cet ID dans une autre table.
Dans mon formulaire de traitement, j'ai des données classiques que j'ajoute comme ceci :
$titre1=$_POST['titre1']; $titre2=$_POST['titre2'];
C'est après que ça coince... J'ai essayé des tas de combinaisons mais rien à faire, ça marche pas !
$prog=$data['prog']; $req = "INSERT INTO etats_films VALUES((SELECT id_progs FROM etats_films INNER JOIN progs ON etats_films.progs_id_progs = progs.id_progs WHERE prog = $prog )'$titre1','$titre2', '$fk_id_progs' )";
Une piste..?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si ta liste de valeur est bien faite comme j'ai indiqué plus haut, tu dois récupérer l'id de prog comme les titres:
$titre1=$_POST['titre1'];
$titre2=$_POST['titre2'];
$prog=$_POST['prog'];
et l'insert est tout simple VALUES('$titre1','$titre2', '$prog' )";
$titre1=$_POST['titre1'];
$titre2=$_POST['titre2'];
$prog=$_POST['prog'];
et l'insert est tout simple VALUES('$titre1','$titre2', '$prog' )";
Et bien je bloque toujours au moment de l'INSERT :
J'ai une erreur de contrainte et mes recherches sur cette erreur n'ont pas abouties...
J'ai une erreur de contrainte et mes recherches sur cette erreur n'ont pas abouties...
Error: Cannot add or update a child row: a foreign key constraint fails ('gest_films'.'etats_films', CONSTRAINT 'fk_etats_films_progs' FOREIGN KEY ('progs_id_progs') REFERENCES 'progs' ('id_progs') ON DELETE NO ACTION ON UPDATE NO ACTION)
En cas de difficultés il faut décomposer ;-)
1/ tu vas faire un insert à la main (je ne connais pas mysql donc je ne sais pas avec quel outil) INSERT INTO etats_films VALUES('Titre 1','Titre 2', 1234)
1234 doit être une vraie valeur existant dans la table prog
Pour voir si le problème ne vient pas de la définition de structure des tables
2/ Tu vas remplacer le source appelé par le formulaire par celui ci
Pour voir si tu récupères bien la valeur de l'id souhaité. Tu devrais avoir la valeur qui tu as mis pour le 1234 du 1/
☮ Un étranger, c'est un ami qu'on n'a pas encore rencontré.
1/ tu vas faire un insert à la main (je ne connais pas mysql donc je ne sais pas avec quel outil) INSERT INTO etats_films VALUES('Titre 1','Titre 2', 1234)
1234 doit être une vraie valeur existant dans la table prog
Pour voir si le problème ne vient pas de la définition de structure des tables
2/ Tu vas remplacer le source appelé par le formulaire par celui ci
==== aff.php <?php $titre1=$_POST['titre1']; $titre2=$_POST['titre2']; $prog=$_POST['prog']; echo $titre1, "<br />"; echo $titre2 , "<br />"; echo $prog , "<br />"; ?>
Pour voir si tu récupères bien la valeur de l'id souhaité. Tu devrais avoir la valeur qui tu as mis pour le 1234 du 1/
☮ Un étranger, c'est un ami qu'on n'a pas encore rencontré.
Bien pensé ! Ca m'a aidé à y voir plus clair du coup.
Alors avec les 2 méthodes, ça marche nickel !
En revanche, dès que je remet mon code, toujours même erreur de contrainte !
Je pense que j'ai une erreur de transmission de données entre mon formulaire et ma page d'envoi dans la BDD.
Quand je transmets mes données et que je les affiches, je ne vois que mes 2 inputs texte
Le champ sélectionné de ma liste déroulante n'apparait pas..!
Problème de variable ou de nom ?
Voici mon formulaire :
Et ma page d'envoi :
Une idée sur un paramètre que je néglige ?
Merci :-)
Alors avec les 2 méthodes, ça marche nickel !
En revanche, dès que je remet mon code, toujours même erreur de contrainte !
Je pense que j'ai une erreur de transmission de données entre mon formulaire et ma page d'envoi dans la BDD.
Quand je transmets mes données et que je les affiches, je ne vois que mes 2 inputs texte
$titre1et
$titre2
Le champ sélectionné de ma liste déroulante n'apparait pas..!
Problème de variable ou de nom ?
Voici mon formulaire :
<select name="prog" id="prog"> <?php $prog = $bdd->query('SELECT id_progs, prog FROM progs'); while ($donnees = $prog->fetch()) { ?> <option value=" <?php echo $donnees['id_progs']; ?>" name="id_progs" id="id_progs"> <?php echo $donnees['prog']; ?></option> <?php } $prog->closeCursor(); ?> </select>
Et ma page d'envoi :
<?php include "config.php"; ?> <?php $titre_film=$_POST['titre_film']; $titre_dcp=$_POST['titre_dcp']; $prog=$_POST['progs_id_progs']; $req = "INSERT INTO etats_films (titre_film, titre_dcp, progs_id_progs) VALUES('$titre_film','$titre_dcp','$progs_id_progs')"; mysql_query($req); ?>
Une idée sur un paramètre que je néglige ?
Merci :-)