Tribalnanasss | Bonjour tout le monde,
j'ai un soucis avec javascript;
j'aimerai afficher autant de fois que l'utilisateur le veut certains champs. J'ai donc creer des objet avec des onchange pour les faire apparaître.
Seulement, quand j'arrive au dernier onchange et qu'il renvoie au 1er, toutes les autres listes s'effacent pour revenir au même point qu'au depart.
Je me suis dis que c'etait peu être un problème de nom de champs que j'ai voulu corriger en concatenant un chiffre à la fin du nom du champs. Mais la variable revient également à 0...
Je vous mets le code pour plus de compréhension.
Code :
- <?php
- echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" );
- ?>
- <html xml:lang="fr" >
- <head>
- <script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script>
- <script type="text/javascript" src="./changeValeur.js" charset="iso_8859-1"></script>
- <script type="text/javascript" src="./operateur.js" charset="iso_8859-1"></script>
- <script type="text/javascript" src="./appChamps.js" charset="iso_8859-1"></script>
-
- <title> Base de données ARECOFA </title>
- </title>
- <br/><br/><u><font size=+50 color=seagreen> <center> Test : </center></font></u>
- <br/><br/><br/><br/>
- <?php
- $link=mysql_connect("localhost", "root", "" ) OR die('Erreur de connexion');
- mysql_select_db("arecofa" );
- $req=mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='produit' or TABLE_NAME='fabricant'" ) or die ("requete impossible" );
- $champs=array();
- while ($row = mysql_fetch_array($req))
- {//echo "colonne : $row[0] <br/>";
- if ($row[0] != "num_fabricant" and $row[0] != "num_de_produit" and $row[0] != "photo" and $row[0] != "adresse" and $row[0] != "description" )
- {$recherche=mysql_query("select distinct $row[0] from produit, fabricant " );
- $id = 0;
- $temoin_t=0;
- //echo "champs : <br/>";
- while($ligne = mysql_fetch_assoc($recherche))
- {$p = $row[0];
- $v = $ligne[$row[0]];
- if ($temoin_t==0)
- {$champs[$p]=array();
- $champs[$p][1] = array();
- $champs[$p][2] = array();
- $temoin_t=1;
- }
- $champs[$p][1][$id] = $v;
- $champs[$p][2][$id] = $ligne[$row[0]];
- $id++;
- }
- }
- else
- {if($row[0] == "adresse" or $row[0] == "description" )
- {$p = $row[0];
- $champs[$p] = array();
- $champs[$p][1] = array();
- $champs[$p][2] = array();
- $champs[$p][1][0] = "";
- $champs[$p][2][0] = "";
- }
- }
- }
- $chaine = htmlspecialchars(serialize($champs), ENT_QUOTES);
- ?>
- <script type="text/javascript">
- /* <![CDATA[ */
- <!--
- /*
- * Ici, on transmets la chaîne sérialisée à JavaScript
- * pour la transformer en tableau indexé JavaScript
- */
- var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
- var tab = tableau.retour();
- var k =0;
- // -->
- /* ]]> */
- </script>
- </head>
- <body style="background:lightgreen" link=darkgreen vlink=green>
- <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgprod">
- <legend>Sélectionnez un champs puis une condition et une valeur </legend>
- <select name="champs0" id="champs0" onchange="changeValeur(tab,this.value,k);">
- <option value="vide">- - - Choisissez un champs - - -</option>
- <?php
- /* Construction de la première liste : on se sert du tableau PHP */
- $nbr = count($champs);
- foreach($champs as $nr => $nom)
- {$ch = "$nr"."0";
- ?>
- <option value="<?php echo($ch); ?>"><?php echo($nr); ?></option>
- <?php
- }
- ?>
- </select>
- <span id="blocValeur"></span>
-
- <br/><br/>
- <input type="submit" name="ok" id="ok" value="Envoyer" />
- </form>
- </body>
- </html>
|
fichiers javascript :
Code :
- /* On crée la fonction qui va construire la seconde liste déroulante */
- function changeValeur(tab, champs_reg, k)
- {var reg = /^[a-zA-Z]+/;
- var champs = reg.exec(champs_reg);
- if(champs != "vide" && champs != "description" && champs != "adresse" )
- {var nbd = tab[champs][1].length;
- form_d += '<select name="condition" id="condition" > <option value="vide">- - - Choisissez une condition - - -</option> <option value="egal">égal</option> <option value="sup">supérieur à </option> <option value="inf">inférieur à</option> <option value="sup_eg">supérieur ou égal à</option> <option value="inf_eg">inférieur ou égal à</option> <option value="plus_gd"> le plus grand </option> <option value="plus_petit">le plus petit</option> </select> ';
- form_d += '<select name="valeur" id="nom_valeur" onchange="operateur(tab, this.value,k);">';
- form_d += '<option value="vide">- - - Choisissez une valeur - - -</option>';
- for(var j = 0; j < nbd; j++)
- {if (tab[champs][1][j] != undefined)
- {form_d += ' <option value="'+ tab[champs][1][j] +k+'">'+ tab[champs][2][j] +'<\/option>';
- }
- }
- form_d += '<\/select>';
- }
- else
- {if(champs == "adresse" || champs == "description" )
- {var form_d = '<select name="condition" id="condition" > <option value="vide">- - - Choisissez une condition - - -</option> <option value="contient">contient</option> <option value="contient_pas"> ne contient pas </option> </select> ';
- form_d += '<input type="text" name = "'+ champs +k+'" value = "Tapez votre recherche ici" size = "50" onchange="operateur(tab, this.value,k);" />';
- }
- else
- {form_d = "";
- }
- }
- form_d += 'k : '+k+' <br/><br/><span id="blocOperateur"></span>';
- document.getElementById("blocValeur" ).innerHTML = form_d;
- }
|
Code :
- function operateur(tab, champs,k)
- {k++;
- if(champs != "vide" )
- {var form_d = 'k : '+k+' Choisissez une condition si vous voulez rajouter un élément de recherche <br/>';
- form_d += '<select name="operateur" id="operateur" onchange="appChamps(tab,this.value,k);"> <option value="vide"></option> <option value="et">ET</option> <option value="ou">OU</option> </select> ';
- }
- else
- {var form_d = "";
- }
- form_d += '<br/><br/><span id="blocChamps"></span>';
- document.getElementById("blocOperateur" ).innerHTML = form_d;
- }
|
Code :
- function appChamps(tab, champs,k)
- {if(champs != "vide" )
- {var form_d = '<select name="champs" id="nom_champs" onchange="changeValeur(tab, this.value,k);">';
- form_d += '<option value="vide">- - - Choisissez un champs - - -</option>';
- for (i in tab)
- {form_d += '<option value="'+i+k+'">'+i+'</option>';
- }
- form_d += '</select> ';
- }
- else
- {var form_d = "";
- }
- form_d += '<br/><br/><span id="blocValeur"></span>';
- document.getElementById("blocChamps" ).innerHTML = form_d;
- }
|
Merci à tous ceux qui ont pris la peine de me lire ! Message édité par Tribalnanasss le 08-07-2010 à 18:41:26
|