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 :-)

10 réponses

  1. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    Dans ton formulaire tu n'as pas de champ nommé 'progs_id_progs' comment veux tu initialiser :
    $prog=$_POST['progs_id_progs'];
    1
  2. Utilisateur anonyme
     
    Up
    0
    1. Utilisateur anonyme
       
      Up !!
      0
    2. Utilisateur anonyme
       
      Up please !!
      0
    3. Utilisateur anonyme
       
      Up up !!!
      0
  3. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  7. 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
    1. abdoul mounaf Messages postés 6 Statut Membre
       
      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
  8. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  9. 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
  10. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  11. 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