X fois meme liste deroulante dans un meme formulaire

Petit nouveau ! | 7 Messages

09 nov. 2010, 20:10

Bonjour a tous
je viens a vous pour vous demander gentillement de l'aide pour un petit programme que je developpe tout seul utilisant les langage PHP , AJAX et relation avec ma BDD SQL
en fait j'ai actuellement réalisé 3 listes déroulante liées les unes au autres, tout cela dans un meme formulaire.
La liste 1 selectionne un domain d'activité ( comptabilité, archive)
La liste 2 selectionne un sous domaine (vente, achat)
La liste 3 liste des nom que j'ai donné donc ( XJ2-3D, etc...)

Cette derniere liste 3 lors de sa selection affiche la selection dans un champ text qui lui est transmis via le formulaire lors de sa validation et rempli un champ d'une table de ma BDD SQL
en fonction du choix donnée ,l'utilisateur a toujours le meme champs description a remplir en dessous du nom bizarre

Mon but est de pouvoir avoir un bouton qui en cliquant dessus ajoute une autre fois les liste déroulante dans un autre champ text et qui ajoute lui aussi un nouveau champ description

En gros mon formulaire actuellement est :

Liste 1 -> Liste 2 -> Liste 3 -> Champ texte contenant la selection de la liste 3
L'utilisateur rempli alors le champ description situé sous le champ Text

Je voudrai que ce groupement des 3 liste + champ text ainsi que le champs description soient duplicables a l'infini avec des noms différents ,
au travers d'un bouton "ajouter un autre champ" (champ étant le groupement ci dessus)


Est ce possible, sans rechargement de page lors de l'ajout des nouveau champs?!
POuvez vous m'aidez s'il vous plait :) ?

Merci d'avance

Mammouth du PHP | 661 Messages

09 nov. 2010, 20:45

Est ce possible, sans rechargement de page lors de l'ajout des nouveau champs?!
c'est possible !..

mon approche serait la suivante ::

dans une div cachée php, lors de la création de la page place le squelette du formulaire !
et lancerait une fonction qui copierait tout le formulaire, en modifiant le nom et l'id des éléments et le placerait dans le formulaire final.
et lancerait les évents sur ces nouveaux éléments pour le chargement AJAX des listes ...

ensuite, tu as un bouton qui lance la fonction automatiquement, ce qui reproduira la même chose, ... infiniment !... :D

Attention au noms de tes éléments HTML, il ne faut pas qu'il y ai deux éléments avec le meme ID, et faut pouvoir tous les recevoir sans soucy à l'upload du formulaire !...

BonCourage ;)

Petit nouveau ! | 7 Messages

09 nov. 2010, 22:01

merci beaucoup pour ton idée et ta rapidité ,
si j'ai bien compris je met le formulaire dans un div mais il y aura plusieurs fois le meme "name" des zone text non si je duplique non?
je m'explique :

j'ai deux zone text :

<input type="text" name="nom"/>
<input type="text" name="dsc" />


ca fait donc que lorsque je vais duplique en cliquant sur mon bouton il va me copier mes input avec le meme nom, comment puis l'interpreter au moment de l'upload?

Merci d'avance

edit : autant pour moi en fait le div rajoute par exemple un numero a la fin du name et cela infiniment?!

et il me faut donc faire une boucle au moment de l'upload pour inserer que les champ existant c'est bien ca ?

Mammouth du PHP | 661 Messages

09 nov. 2010, 23:12

qui copierait tout le formulaire, en modifiant le nom et l'id des éléments et le placerait dans le formulaire final.
je t'avais di qu'il fallait les renommer ... :D

ensuite pour l'upload, c'est à toi de voir, mais si tu les renommes bien, il ne devrait pas y avoir de soucys pour les récupérer en php sans les traiter à l'upload ;)

Petit nouveau ! | 7 Messages

10 nov. 2010, 14:03

Code : Tout sélectionner

<?PHP include 'P100-FID-CONNEXION-BD-V01.php'; $fidele_dsc=''; $fidele_name=''; $table=''; $Ld1_retour =''; //id_département clé de la liste déroulante 1 $Ld2_retour =''; //id_commune clé de la liste déroulante 2 $Ld3_retour =''; //id de la liste déroulante numéro 3 Fidele name if (isset($_GET['Ld1'])) {$Ld1_retour = $_GET['Ld1'];} if (isset($_GET['Ld2'])) {$Ld2_retour = $_GET['Ld2'];} if (isset($_GET['Ld3'])) {$Ld3_retour = $_GET['Ld3'];} // Test de l'id retourné par Ld2 //echo $Ld2_retour; //echo "<input value='".$Ld3_retour."'/>"; //echo "coucou"; if (($Ld1_retour!='')&&($Ld2_retour!='')) { $rq="SELECT `FIDELE-DESCRIPTION`,`DONNEES`,`FIDELE-NAME` FROM `fid001tds_dico_v01` WHERE `id` =".$Ld3_retour.""; $result= mysql_query ($rq) or die ("Requête impossible"); if (mysql_num_rows($result) != 0) { while ($row = mysql_fetch_assoc($result)) { $fidele_dsc = $row["FIDELE-DESCRIPTION"]; $fidele_name = $row["FIDELE-NAME"]; $table = $row["DONNEES"]; } } else { $retour = '<input id="Liste4" type="text" size="10" value="Aucune valeur" disabled>'; } mysql_free_result($result); mysql_close($connexion); }else { $retour = '<input id="Liste4" type="text" size="10" value="Aucune valeur" disabled>'; } echo"<br/>"; echo "<input type='text' name='Liste4' id='Liste4' readonly='readonly' value=".$fidele_name.">"; echo $fidele_dsc; echo "<input type='hidden' name='fidele_dsc' value='".$fidele_dsc."'/>"; ?>
voici mon code pour la liste qui rempli le champ texte, pourrai tu m'indiquer si ya du changement a faire? car enfait chaque liste est dans un fichier php différent ce qui est logique je pense ?!

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Listes déroulantes</title> <script type="text/javascript"> var Ld1Id=''; var Ld2Id=''; var Ld3Id=''; var id_liste=''; function ValideLd2(val) { Ld1Id=val; //id_Domaine id_liste='2';//Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante var LD_URL = 'P100-FID-LISTE2-V01.php?Ld1='+Ld1Id; ObjetXHR(LD_URL) // Réinitialisation de Ld3 si modification de LD1 après passage en Ld2 if (Ld2Id!='') {ValideLd3('');} } function ValideLd3(val) { Ld2Id=val; //id_FIDELE_NAME id_liste='3'; //Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante var LD_URL = 'P100-FID-LISTE3-V01.php?Ld1='+Ld1Id+'&Ld2='+Ld2Id; if (Ld2Id=='') {var LD_URL = 'P100-FID-LISTE3-V01.php';} ObjetXHR(LD_URL) } function ValideLd4(val) { Ld3Id=val; //id_FIDELE_NAME id_liste='4'; //Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante var LD_URL = 'P100-FID-LISTE4-V01.php?Ld1='+Ld1Id+'&Ld2='+Ld2Id+'&Ld3='+Ld3Id; if (Ld3Id=='') {var LD_URL = 'P100-FID-LISTE4-V01.php';} ObjetXHR(LD_URL) } function ObjetXHR(LD_URL) { //creation de l'objet XMLHttpRequest if (window.XMLHttpRequest) { // Mozilla,... xmlhttp=new XMLHttpRequest(); if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType('text/xml'); } xmlhttp.onreadystatechange=ChargeLd; xmlhttp.open("GET", LD_URL, true); xmlhttp.send(null); } else if (window.ActiveXObject) { //IE xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); if (xmlhttp) { xmlhttp.onreadystatechange=ChargeLd; xmlhttp.open('GET', LD_URL, false); xmlhttp.send(); } } // Bouton non apparent car modification de LD1 ou Ld2 document.getElementById('buttons').style.display='none'; } // fonction pour manipuler l'appel asynchrone function ChargeLd() { if (xmlhttp.readyState==4) { if (xmlhttp.status==200) { //span id="niv2" ou "niv3" document.getElementById('niv'+id_liste).innerHTML=xmlhttp.responseText; if (xmlhttp.responseText.indexOf('disabled')<=0) { //focus sur liste déroulante 2 ou 3 document.getElementById('Liste'+id_liste).focus(); } } } } function Affiche_Btn() { document.getElementById('buttons').style.display='inline'; } </script> <!--<style> #buttons { display: none; } </style>--> </head> <body> <noscript> <p>Cette page nécessite que JavaScript soit activé; dans votre navigateur</p> </noscript> <div id="Les3LD"> <p>Selectionnez votre choix dans les listes ci dessous :</p> <form method="post" action="P100-FID-VALID-V01.php"> <h2>Nom du Catalogue</h2> <input type="text" name="CC_name" /> <h2>Media</h2> Nom du media <input type="text" name="nom_media"/><br /> Command <input type="text" name="command_media"/><br /> <br /> <?php include 'P100-FID-LISTE1-V01.php'; ?>&nbsp; <!--Pour remplir la liste déroulante 1--> <span id="niv2"> <?php include 'P100-FID-LISTE2-V01.php'; ?></span>&nbsp; <!--Pour remplir la liste déroulante 2--> <span id="niv3"> <?php include 'P100-FID-LISTE3-V01.php'; ?></span>&nbsp; <!--Pour remplir la liste déroulante 3--> <span id="niv4"> <?php include 'P100-FID-LISTE4-V01.php'; ?></span>&nbsp; <!--Pour alimenter la zone texte 4--> <br/> </div> <h2>Table</h2> <div id="body" > <div style="border:solid thin #CCC"> Nom du fichier physique <input type="text" name="URL"/><br /> Nom de la table <input type="text" name="table_name"/><br /> Description <input type="text" name="table_dsc"/><br /> De <input type="text" name="table_de"/> à <input type="text" name="table_a"/><br /> Format <input type="text" name="table_format"/><br /> </div><br /> <div style="border:solid thin #CCC"> Indication du séparateur de position décimale <input type="text" name="table_decimal_symbol"/><br /> Définit le séparateur des milliers <input type="text" name="table_digitgroupingsymbol"/><br /> SkipNumBytes <input type="text" name="table_SkipNumBytes"/><br /> Range From <input type="text" name="range_from"/> To <input type="text" name="range_to"/><br /> Epoch <input type="text" name="epoch"/><br /> </div><br /> Longueur Variable <input type="radio" value="variable" name="variable" /> Longueur Fixe<input type="radio" value="fixed" name="variable"/><br /> <div style="border:solid thin #CCC"> Colum Delimiter <input type="text" name="Colum_Delimiter"/><br /> Record Delimiter <input type="text" name="Record_Delimiter"/><br /> Text Encapsulator <input type="text" name="text_encapsulator"/><br /> </div><br /> <div style="border:solid thin #CCC"> Variable Primary Key <input type="text" name="variable_primary_key"/><br /> Nom <input type="text" name="variable_name"/><br /> Description <input type="text" name="variable_dsc"/><br /> Numeric <input type="text" name="variable_numeric"/><br /> Implied Accuracy <input type="text" name="Implied_accuracy"/><br /> Map <input type="text" name="map"/><br /> Description <input type="text" name="map_dsc"/><br /> From <input type="text" name="map_from"/><br /> To <input type="text" name="map_to"/><br /> </div><br /> <div style="border:solid thin #CCC"> Variable Column <input type="text" name="variable_colum"/><br /> Nom <input type="text" name="column_name"/><br /> Description <input type="text" name="column_description"/><br /> Numeric <input type="text" name="column_numeric"/><br /> Implied Accuracy <input type="text" name="column_Implied_accuracy"/><br /> Map <br /> Description <input type="text" name="column_map_dsc"/><br /> From <input type="text" name="column_map_from"/><br /> To <input type="text" name="column_map_to"/><br /> </div><br /> <input type="submit" value="Valider"> </form> </div> </body> </html>
ceci est mon code de la page de mon formulaire

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans titre</title> </head> <body> <?php include("P100-FID-CONNEXION-BD-V01.php"); //Récupération des données du formulaire $command_media = $_POST['command_media']; $nom_media = $_POST['nom_media']; $fidele_name = $_POST['Liste4']; $fidele_dsc = $_POST['fidele_dsc']; $URL = $_POST['URL']; $table_name = $_POST['table_name']; $table_dsc = $_POST['table_dsc']; $table_de = $_POST['table_de']; $table_a = $_POST['table_a']; $table_format = $_POST['table_format']; $table_decimal_symbol = $_POST['table_decimal_symbol']; $table_digitgroupingsymbol = $_POST['table_digitgroupingsymbol']; $range_from = $_POST['range_from']; $range_to = $_POST['range_to']; $epoch = $_POST['epoch']; $table_SkipNumBytes = $_POST['table_SkipNumBytes']; $Colum_Delimiter = $_POST['Colum_Delimiter']; $Record_Delimiter = $_POST['Record_Delimiter']; $text_encapsulator = $_POST['text_encapsulator']; $variable_primary_key = $_POST['variable_primary_key']; $variable_name = $_POST['variable_name']; $variable_dsc = $_POST['variable_dsc']; $map = $_POST['map']; $map_dsc = $_POST['map_dsc']; $map_from = $_POST['map_from']; $map_to = $_POST['map_to']; $column_name = $_POST['column_name']; $column_description = $_POST['column_description']; $column_numeric = $_POST['column_numeric']; $column_Implied_accuracy = $_POST['column_Implied_accuracy']; $column_map_dsc = $_POST['column_map_dsc']; $column_map_from = $_POST['column_map_from']; $column_map_to = $_POST['column_map_to']; $variable_numeric = $_POST['variable_numeric']; $Implied_accuracy = $_POST['Implied_accuracy']; $variable_colum = $_POST['variable_colum']; $CC_name = $_POST['CC_name']; //tests de formulaires //echo $CC_name; //echo $fidele_name; //Insertion dans la base de la date $today = date("Y-m-d"); //Insertion du nom du Catalogue $rq="INSERT INTO `fid009tdd_cc_v01` SET fid009tdd_cc_v01.NAME_CC='".$CC_name."',fid009tdd_cc_v01.DATE_CREATE_CC='".$today."', fid009tdd_cc_v01.MEDIA_NAME='".$nom_media."'"; $result= mysql_query ($rq) or die ("Select impossible"); //Récupération de l'ID du Catalogue client ID_CC $rq="SELECT `ID_CC`,`MEDIA_NAME`,`DATE_CREATE_CC` FROM `fid009tdd_cc_v01` WHERE MEDIA_NAME='".$nom_media."' AND DATE_CREATE_CC='".$today."'"; $result= mysql_query ($rq) or die ("Select impossible"); $row = mysql_fetch_assoc($result); $ID_CC = $row['ID_CC']; //Insertion des données dans le catalogue client CC_TAB $rq="INSERT INTO `fid008tdd_cc_tab_v01` SET fid008tdd_cc_tab_v01.TAB_NAME='".$table_name."',fid008tdd_cc_tab_v01.ID_CC='".$ID_CC."', fid008tdd_cc_tab_v01.URL='".$URL."',fid008tdd_cc_tab_v01.DESCRIPTION='".$table_dsc."',fid008tdd_cc_tab_v01.NAME='".$table_name."',fid008tdd_cc_tab_v01.FROM='".$table_de."',fid008tdd_cc_tab_v01.TO='".$table_a."',fid008tdd_cc_tab_v01.DECIMAL_SYMBOL='".$table_decimal_symbol."', fid008tdd_cc_tab_v01.DIGITGROUPINGSYMBOL='".$table_digitgroupingsymbol."', fid008tdd_cc_tab_v01.SKIPNUMBYTES='".$table_SkipNumBytes."',fid008tdd_cc_tab_v01.EPOCH='".$epoch."',fid008tdd_cc_tab_v01.FORMAT='".$table_format."'"; $result= mysql_query ($rq) or die ("Select impossible"); //Récupération du N° de la TABLE CORRESPONDANT AU ID_CC Crée $rq="SELECT `ID_CC_TAB` FROM `fid008tdd_cc_tab_v01` WHERE ID_CC='".$ID_CC."'"; $result= mysql_query ($rq) or die ("Select impossible"); $row = mysql_fetch_assoc($result); $ID_CC_TAB = $row['ID_CC_TAB']; echo $ID_CC_TAB; //Insertion dans la table CC_field $rq="INSERT INTO `fid010tdd_cc_field_v01` SET fid010tdd_cc_field_v01.ID_CC_TAB='".$ID_CC_TAB."',fid010tdd_cc_field_v01.ID_CC='".$ID_CC."', fid010tdd_cc_field_v01.NAME='".$fidele_name."',fid010tdd_cc_field_v01.DESCRIPTION='".$fidele_dsc."',fid010tdd_cc_field_v01.FIELD_TYPE='".$column_numeric."',fid010tdd_cc_field_v01.MAP_DESCRIPTION='".$column_map_dsc."',fid010tdd_cc_field_v01.MAP_FROM='".$column_map_from."',fid010tdd_cc_field_v01.MAP_TO='".$column_map_to."'"; $result= mysql_query ($rq) or die ("Select impossible"); ?> </body> </html>
et ceci mon code de récupération

je te demande juste de m'expliquer les choses a changer s'il te plait enfin un exemple car je m'avoue un peu perdu :)

merci bcp

Petit nouveau ! | 7 Messages

11 nov. 2010, 12:15

Bonjour a tous , je cherche désespérément sur le net un moyen de copier le div entier en changeant les ID mais je n'y arrive pas ,pourriez vous m'aider s'il vous plait =) ?

Petit nouveau ! | 7 Messages

11 nov. 2010, 12:42

J'ai reussi a dupliquer à l'infini comme tu m'as dis Nours , seulement un probleme subsiste....

Mes liste liées sont elles aussi dupliqué et elles ne sont pas indépendantes .... je m'explique
au départ je choisi , mon domaine , sous domaine, mon nom spécial ok il s'affiche dans le champ text.

Seulement lorsque je rajoute de nouveau une liste je selection le domaine et hop ca me change la liste juste au dessus , je sais que ca viens de mes fichier des différentes liste mais je n'arrive pas a résoudre mon problème.
sinon en ce qui concerne le changement des id des champ c'est nikel j'ai mis un auto incrément ca marche parfaitement :) , merci encore.

si quelqu'un pouvais juste m'aider a faire cette histoire de liste , je vous remerci d'avance :)

Petit nouveau ! | 7 Messages

14 nov. 2010, 22:07

personne? ! :(

Mammouth du PHP | 661 Messages

15 nov. 2010, 20:26

Ben c'est le même principe :: il faut jouer sur tes évents !... lors de la selection du choix sur la liste déroulante, la fonction JS doit récupérer l'autoIncrément de l'élément (la liste) que tu as modifié, faire sa requête ajax, et placer le résultat dans la liste ayant le meme identifiant d'autoIncrément ....

@+

Petit nouveau ! | 7 Messages

15 nov. 2010, 22:23

oki mais je t'avoue que je suis largué sur ce principe la :(, pourrais tu m'aider un peu plus,par rapport a mon code enfin si c'est pas trop demandé :$

Merci