Insérer des données avec un champ FK

Résolu/Fermé
Utilisateur anonyme - 4 août 2013 à 16:09
 Utilisateur anonyme - 19 août 2013 à 19:38
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 :-)
A voir également:

10 réponses

jee pee Messages postés 40214 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 septembre 2024 9 332
18 août 2013 à 09:48
Dans ton formulaire tu n'as pas de champ nommé 'progs_id_progs' comment veux tu initialiser :
$prog=$_POST['progs_id_progs'];
1
Utilisateur anonyme
4 août 2013 à 17:58
Up
0
Utilisateur anonyme
5 août 2013 à 15:44
Up !!
0
Utilisateur anonyme
10 août 2013 à 00:21
Up please !!
0
Utilisateur anonyme
17 août 2013 à 14:47
Up up !!!
0
jee pee Messages postés 40214 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 septembre 2024 9 332
Modifié par jee pee le 17/08/2013 à 16:15
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 :

<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é.
0
Utilisateur anonyme
17 août 2013 à 16:58
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
<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..?
0

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

Posez votre question
jee pee Messages postés 40214 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 septembre 2024 9 332
17 août 2013 à 17:40
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' )";
0
Utilisateur anonyme
17 août 2013 à 18:23
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...

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)
0
abdoul mounaf Messages postés 6 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 22 août 2013
17 août 2013 à 23:51
Salut Paul, j'ai aussi le même problème. si tu as eux la solutions s'il te plaie il faut la postée
Merci
0
jee pee Messages postés 40214 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 septembre 2024 9 332
Modifié par jee pee le 17/08/2013 à 19:10
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

==== 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é.
0
Utilisateur anonyme
18 août 2013 à 03:21
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
$titre1
et
$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 :-)
0
jee pee Messages postés 40214 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 septembre 2024 9 332
18 août 2013 à 09:34
Ce doit donc être le format de ta liste.

Quand on travaille avec un langage comme le php, qui génère le html envoyé au navigateur, il faut regarder ce code html généré.

Avec firefox un clic droit sur la page + code source de la page
0
Utilisateur anonyme
19 août 2013 à 19:38
Héhé !! Quel blaireau... Je prenais le name du
<select>
alors qu'il me fallait le name de la balise
<option>


Ca marche donc super bien !
Je pensais que c'était beaucoup plus compliqué que ça les champs FK... En fait non ^^

Merci de ta précieuse aide :-)
0