Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1246 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  liste déroulantes dynamiques liées et insertion dans BDD (PHP/SQL)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

liste déroulantes dynamiques liées et insertion dans BDD (PHP/SQL)

n°1970795
Antho03
Posté le 03-03-2010 à 10:55:09  profilanswer
 

Bonjour,
 
je vous explique mon problème.
 
J'ai créé un formulaire en intégrant des listes dynamiques liées. Ces listes sont constituées en appelant le contenu de 2 tables ("région" et "département" ) de ma BDD. La 2ème liste s'affiche en fonction du choix fait dans la 1ère. Je récupère les variables des listes et insère le contenu dans une 3ème table "annuaire" dans ma BDD. Jusque là, tout est ok.
 
Voici mon code :

Code :
  1. <?php
  2. /* Requête SQL de récupération des données de la première liste */
  3. $sql = "SELECT `id_region` AS idr, `region` ".
  4.        "FROM `region` ".
  5.        "ORDER BY `id_region`;";
  6. /* Connexion et exécution de la requête */
  7. $connexion = mysql_connect($serveur, $admin, $mdp);
  8. if($connexion != false)
  9. {
  10.     $choixbase = mysql_select_db($base, $connexion);
  11.     $recherche = mysql_query($sql, $connexion);
  12.     /* Création du tableau PHP des valeurs récupérées */
  13.     $regions = array();
  14.     /* Index du département par tableau régional */
  15.     $id = 0;
  16.     while($ligne = mysql_fetch_assoc($recherche))
  17.     {
  18.         $regions[$ligne['idr']] = $ligne['region'];
  19.     }
  20.    
  21. ?>
  22. <form name="form" action="action.php" method="post" style="color: #333; font-size:14px;">
  23. <table width="650" border="0" cellspacing="3">
  24.  
  25. <tr class="bleu">
  26. <td> Région :
  27.     <select name="Zregion" id="region" onChange="getSecteur1(this.value);">
  28.       <option value="vide">- - - Choisissez une région - - -</option>
  29.     <?php
  30.     /* Construction de la première liste : on se sert du tableau PHP */
  31.     foreach($regions as $nr => $nom)
  32.     {
  33.         ?>
  34.     <option value="<?php echo($nr); ?>"><?php echo($nom); ?></option>
  35. <?php
  36.     }
  37.     ?>
  38.     </select>
  39.     <!-- on met un bloc avec un id ou va s'insérer le code de
  40.          la seconde liste déroulande -->
  41.   <span id="blocDepartements">Départements</span><br />
  42.   <? $rq="Select region from region where (id_region = '".$nr."')"; ?>
  43.   </td></tr></table>
  44. </form>


 
la liste département est générée par un fichier PHP (et un fichier JS également) :

Code :
  1. <?php
  2. /**
  3. * Code qui sera aeeplé par un objet XHR et qui
  4. * retournera la liste déroulante des départements
  5. * correspondant à la région sélectionnée.
  6. */
  7. /* Paramètres de connexion */
  8. $serveur = "localhost";
  9. $admin   = "*****";
  10. $mdp     = "*****";
  11. $base    = "*****";
  12. /* On récupère l'identifiant de la région choisie. */
  13. $idr = isset($_GET['idr']) ? $_GET['idr'] : false;
  14. /* Si on a une région, on procède à la requête */
  15. if(false !== $idr)
  16. {
  17.     /* Cération de la requête pour avoir les départements de cette région */
  18.     $sql2 = "SELECT `id_departement`, `departement`".
  19.             " FROM `departement`".
  20.             " WHERE `id_region` = ". $idr ."".
  21.             " ORDER BY `id_departement`;";
  22.     $connexion = mysql_connect($serveur, $admin, $mdp);
  23.     mysql_select_db($base, $connexion);
  24.     $rech_dept = mysql_query($sql2, $connexion);
  25.     /* Un petit compteur pour les départements */
  26.     $nd = 0;
  27.     /* On crée deux tableaux pour les numéros et les noms des départements */
  28.     $code_dept = array();
  29.     $nom_dept = array();
  30.     /* On va mettre les numéros et noms des départements dans les deux tableaux */
  31.     while(false != ($ligne_dept = mysql_fetch_assoc($rech_dept)))
  32.     {
  33.         $code_dept[] = $ligne_dept['id_departement'];
  34.         $nom_dept[]  = $ligne_dept['departement'];
  35.         $nd++;
  36.     }
  37.     /* Maintenant on peut construire la liste déroulante */
  38.     $liste = "";
  39.     $liste .= '<select name="Zdepartement" id="departement">'."\n";
  40.     for($d = 0; $d < $nd; $d++)
  41.     {
  42.         $liste .= '  <option value="'. $code_dept[$d] .'">'. htmlentities($nom_dept[$d]) .'</option>'."\n";
  43.     }
  44.     $liste .= '</select>'."\n";
  45.     /* Un petit coup de balai */
  46.     mysql_free_result($rech_dept);
  47.     /* Affichage de la liste déroulante */
  48.     echo($liste);
  49. }
  50. /* Sinon on retourne un message d'erreur */
  51. else
  52. {
  53.     echo("<p>Une erreur s'est produite. La région sélectionnée comporte une donnée invalide.</p>\n" );
  54. }
  55. ?>


 
Mon problème est le suivant : en récupérant les valeurs "Zregion" et "Zdepartement" dans les listes, ce sont les id qui sont enregistrés dans ma table et non pas les noms des départements et régions.
La question que je me pose et sur laquelle je demande votre aide est : comment faire pour enregistrer les noms à la place des id ?
 
J'ai pensé à une requete du genre :

Code :
  1. $rq="Select region from region where (id_region = '".$nr."')";

qui permettrait de changer l'id en nom mais 1: je ne suis pas sur qu'elle soit correcte et 2: je ne sais pas où la placer.
 
 
Merci pour votre aide

mood
Publicité
Posté le 03-03-2010 à 10:55:09  profilanswer
 

n°1970822
Tirkyth
Posté le 03-03-2010 à 11:50:19  profilanswer
 

Antho03 a écrit :


J'ai pensé à une requete du genre :

Code :
  1. $rq="Select region from region where (id_region = '".$nr."')";

qui permettrait de changer l'id en nom mais 1: je ne suis pas sur qu'elle soit correcte et 2: je ne sais pas où la placer.


Sûrement un peu avant ton code qui enregistre en base de données. On peut l'avoir d'ailleurs ce code ?

n°1970827
Antho03
Posté le 03-03-2010 à 11:58:32  profilanswer
 

Tirkyth a écrit :


Sûrement un peu avant ton code qui enregistre en base de données. On peut l'avoir d'ailleurs ce code ?


 
Merci pour ta réponse.
 
Voilà le code d'action.php :

Code :
  1. <?php
  2. echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" );
  3. /* Variables de connexion */
  4. $serveur = "localhost";
  5. $admin   = "*****";
  6. $mdp     = "*****";
  7. $base    = "*****";
  8. //connexion à la base
  9. @mysql_connect($serveur, $admin, $mdp)
  10. or die("Impossible de se connecter au serveur de bases de données.".mysql_error());
  11. //sélection de la base
  12. @mysql_select_db($base)
  13. or die("Impossible de se connecter à la base de données.".mysql_error());
  14. $Zregion = htmlentities($_POST['Zregion']);
  15. $Zdepartement = htmlentities($_POST['Zdepartement']);
  16. /* Enregistrement du formulaire dans la BDD */
  17. $annuaire = mysql_query("insert into annuaire (region, departement) values('".$Zregion."','".$Zdepartement."')" );
  18. echo "inscription effectuée";
  19. ?>


Message édité par Antho03 le 03-03-2010 à 11:58:46
n°1970839
Tirkyth
Posté le 03-03-2010 à 13:23:51  profilanswer
 

Merci.
 
Est-ce que le problème ne serait pas résolu en faisant ces manipulations :
dans ta première portion de code de ton premier post, remplacer la ligne 36 par

Code :
  1. <option value="<?php echo($nom); ?>"><?php echo($nom); ?></option>


Et dans la seconde portion, remplacer la ligne 43 par

Code :
  1. $liste .= '  <option value="'. $nom_dept[$d] .'">'. htmlentities($nom_dept[$d]) .'</option>'."\n";

n°1970860
Antho03
Posté le 03-03-2010 à 14:44:16  profilanswer
 

Tirkyth a écrit :

Merci.
 
Est-ce que le problème ne serait pas résolu en faisant ces manipulations :
dans ta première portion de code de ton premier post, remplacer la ligne 36 par

Code :
  1. <option value="<?php echo($nom); ?>"><?php echo($nom); ?></option>


Et dans la seconde portion, remplacer la ligne 43 par

Code :
  1. $liste .= '  <option value="'. $nom_dept[$d] .'">'. htmlentities($nom_dept[$d]) .'</option>'."\n";



 
J'ai mis le code que tu m'as donné. Avec celui-ci, au choix de la région (1ère liste déroulante), cela génère une 2ème liste vide.

n°1970907
Tirkyth
Posté le 03-03-2010 à 17:00:08  profilanswer
 

Ouais, en effet ... C'est normal en fait. T'as besoin de l'ID pour renvoyer ta 2ème liste, or moi je t'ai fait enlever l'ID pour mettre directement le nom dans les valeurs du formulaire afin que ça soit enregistré directement. Donc remet comme c'était avant  :D . En effet, tu vas devoir faire comme tu disais des requêtes en plus.
 
On en vient donc au code tu m'as transmis après la première réponse, celui chargé d'enregistrer :
 

Code :
  1. <?php
  2. echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" );
  3. /* Variables de connexion */
  4. $serveur = "localhost";
  5. $admin   = "*****";
  6. $mdp     = "*****";
  7. $base    = "*****";
  8. //connexion à la base
  9. @mysql_connect($serveur, $admin, $mdp)
  10. or die("Impossible de se connecter au serveur de bases de données.".mysql_error());
  11. //sélection de la base
  12. or die("Impossible de se connecter à la base de données.".mysql_error());
  13.  
  14. /* Récupération des noms de région et département selon les ID */
  15. $Zregion = null;
  16. $query = "SELECT region FROM region WHERE id_region = ".intval($_POST['Zregion']);
  17. $result = mysql_query($query);
  18. if ($ligne = mysql_fetch_assoc($result))
  19. {
  20.  $Zregion = $ligne['region'];
  21. }
  22.  
  23. $Zdepartement = null;
  24. $query = "SELECT departement FROM departement WHERE id_departement = ".intval($_POST['Zdepartement']);
  25. $result = mysql_query($query);
  26. if ($ligne = mysql_fetch_assoc($result))
  27. {
  28.  $Zdepartement = $ligne['departement'];
  29. }
  30.  
  31. /* Enregistrement du formulaire dans la BDD */
  32. $annuaire = mysql_query("insert into annuaire (region, departement) values('".$Zregion."','".$Zdepartement."')" );
  33. echo "inscription effectuée";
  34. ?>


 
Voilà, essaye avec ça, et dis moi ce que ça donne.

n°1971428
Antho03
Posté le 05-03-2010 à 15:10:07  profilanswer
 

Merci pour ta réponse.
 
Je viens de tester, ça ne fonctionne pas. Ca envoit toujours les id dans la BDD. Mais je pense pas qu'on soit bien loin de ce qu'on cherche.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  liste déroulantes dynamiques liées et insertion dans BDD (PHP/SQL)

 

Sujets relatifs
[Doctrine] modèle depuis Yaml ou depuis Bdd ?pb insertion champ vide dans BDD via formulaire (PHP/SQL) [Résolu]
Affichage de fiche produit en PHP/SQLMail automatique (PHP si possible) depuis données SQL
application PHP sur un CD 
Plus de sujets relatifs à : liste déroulantes dynamiques liées et insertion dans BDD (PHP/SQL)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR