Insérer des données avec un champ FK

Résolu
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 :-)
A voir également:

10 réponses

jee pee Messages postés 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
 
Up
0
Utilisateur anonyme
 
Up !!
0
Utilisateur anonyme
 
Up please !!
0
Utilisateur anonyme
 
Up up !!!
0
jee pee Messages postés 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
 
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 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
 
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   Statut Membre Dernière intervention  
 
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 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
 
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 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
 
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