Double liste déroulante a partir d'un base de données mysql qui maintient sont statut

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 874 fois - Téléchargée 30 fois

Contenu du snippet

La page php écrit du javascript avec les données enregistrées dans la base de données.
pour l'instant j'emploie 2 listes déroulantens, mais en pricipe le nombre n'est pas limité.
Et va écrir le choix fait par l'utilisateur dans la base de données.
Le code est assez complexe pour débutants. mais je me ferais un plaisir de l'implementer.
Pour autant que j'ai cherché ce code est unique.

Source / Exemple :


<html>
<head>
<title>Double Linked comboboxes with php-mysql</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<?php 

if (!isset($passed_value)){ $passed_value=1;}// example
if (!isset($passed_value2)){ $passed_value2=1;}// example
if (!isset($passed_value3)){ $passed_value3=1;}// example
if (!isset($passed_value4)){ $passed_value4=1;}// example
// in the body onload sequence we call a function 'redirect' to set our comboboxes
?>
<body onload="redirect(<?php echo $passed_value.','.$passed_value2?>,2);redirect(<?php echo $passed_value3.','.$passed_value4?>,2)">
<?php 

// standard conexxion  see the included file conexxion.php
include('conexxion.php');
$id_link = @mysql_connect($dbhost, $loginname, $loginpass);
		if( ! $id_link ){
		//echo 'Cannot login';
		}else{
		//echo 'Succesfull conected to db';
		}
		mysql_select_db($dbname, $id_link) or die(mysql_error);
	
// select the data from table 'hoofd_akt' for the main aktivities for the first combobox called "example"
$sql="select * from landen";
//  select the data from 'sub_akt' for the linked sub category for the second combo box stage 2
$sql2="select * from provincies WHERE vr_sleutel=".$passed_value;
$result=mysql_query($sql,$id_link) or die (mysql_error());
$result2=mysql_query($sql2,$id_link) or die (mysql_error());
echo 'result2'.$result2.'<br>';
?>
<!-- --><form name="doublecombo">
<select name="example" size="1"  onChange="redirect(this.options.selectedIndex,<?php echo $passed_value.','.$passed_value2?>)">
<option>-select-</option>

<?php
// echo the options for box 1 and 2
// as the idnumber is stored in the table with all results, here we compare to set SELECTED
// this is a standard formula for retrieving stored info about a box selection
  while ($newarray=mysql_fetch_array($result)) {
    echo '<option value="'.$newarray['idnumber'].'" ';
	 if ($newarray['idnumber']==$passed_value) {echo "SELECTED";};
	 echo '>'.$newarray['land_naam'].'</option>'.'\n';
   } ?>  
</select>
<select name="stage2" size="1">
<?php 
// here we do the same for the second box
		
		while ($newarray=mysql_fetch_array($result2)) {	
    echo '<option value="'.$newarray['idnumber'].'" ';
	 if ($newarray['idnumber']==$passed_value2) {echo "SELECTED";};
	 echo '>'.$newarray['prov_naam'].'</option>';
     $x=$x+1;} ?>
</select>

<script>
<!--
/*
The original JScript can be found in nearly every JScript website
I'm just mentioning one :)
Courtesy of SimplytheBest.net - http://simplythebest.net

  • /
var groups=document.doublecombo.example.options.length var group=new Array(groups) for (i=0; i<groups; i++){ group[i]=new Array } <?php //Here comes the data from the two linked tables in a format suited for JScripting // into the script mentioned here above $sql="select * from landen"; $result=mysql_query($sql,$id_link) or die (mysql_error()); $x=0;$y=0;$m=0;$z=1; while ($newarray=mysql_fetch_array($result)) { echo "group[0][$m]=new Option(\"".$newarray['land_naam'].'","'.$newarray['idnumber'].'")'."\n"; $sql2="select * from provincies WHERE vr_sleutel=".$newarray['idnumber']." order by idnumber asc"; $result2=mysql_query($sql2,$id_link) or die (mysql_error()); while ($newarray2=mysql_fetch_array($result2)) { echo "group[$z][$y]=new Option(\"".$newarray2['prov_naam'].'","'.$newarray2['idnumber'].'")'."\n"; $y=$y+1; } $z=$z+1; $y=0; $m=$m+1; } ?> var temp=document.doublecombo.stage2 function redirect(x,d,f){ for (m=temp.options.length-1;m>0;m--) temp.options[m]=null for (i=0;i<group[x].length;i++){ temp.options[i]=new Option(group[eval(x)][i].text,group[eval(x)][i].value) } temp.options[d].selected=true } //--> </script> <?php //sql voor de 2e set comboboxen $sql="select * from landen"; // select the data from 'sub_akt' for the linked sub category for the second combo box stage 2 $sql2="select * from provincies WHERE vr_sleutel=".$passed_value; $result=mysql_query($sql,$id_link) or die (mysql_error()); $result2=mysql_query($sql2,$id_link) or die (mysql_error()); echo 'result2'.$result2.'<br>'; ?> <select name="example2" size="1" onChange="redirect2(this.options.selectedIndex,<?php echo $passed_value3.','.$passed_value4?>)"> <option>-select-</option> <?php // echo the options for box 3 and 4 // as the idnumber is stored in the table with all results, here we compare to set SELECTED // this is a standard formula for retrieving stored info about a box selection while ($newarray=mysql_fetch_array($result)) { echo '<option value="'.$newarray['idnumber'].'" '; if ($newarray['idnumber']==$passed_value3) {echo "SELECTED";}; echo '>'.$newarray['land_naam'].'</option>'.'\n'; } ?> </select> <select name="stage22" size="1"> <?php // here we do the same for the second box while ($newarray=mysql_fetch_array($result2)) { echo '<option value="'.$newarray['idnumber'].'" '; if ($newarray['idnumber']==$passed_value4) {echo "SELECTED";}; echo '>'.$newarray['prov_naam'].'</option>'; $x=$x+1;} ?> </select> <script> var groups2=document.doublecombo.example2.options.length var group2=new Array(groups2) for (i=0; i<groups2; i++){ group2[i]=new Array } <?php //Here comes the data from the two linked tables in a format suited for JScripting // into the script mentioned here above $sql="select * from landen"; $result=mysql_query($sql,$id_link) or die (mysql_error()); $x=0;$y=0;$m=0;$z=1; while ($newarray=mysql_fetch_array($result)) { echo "group2[0][$m]=new Option(\"".$newarray['land_naam'].'","'.$newarray['idnumber'].'")'."\n"; $sql2="select * from provincies WHERE vr_sleutel=".$newarray['idnumber']." order by idnumber asc"; $result2=mysql_query($sql2,$id_link) or die (mysql_error()); while ($newarray2=mysql_fetch_array($result2)) { echo "group2[$z][$y]=new Option(\"".$newarray2['prov_naam'].'","'.$newarray2['idnumber'].'")'."\n"; $y=$y+1; } $z=$z+1; $y=0; $m=$m+1; } ?> var temp2=document.doublecombo.stage22 function redirect2(x2,d2,f2){ for (m=temp2.options.length-1;m>0;m--) temp2.options[m]=null for (i=0;i<group2[x2].length;i++){ temp2.options[i]=new Option(group2[eval(x2)][i].text,group2[eval(x2)][i].value) } temp2.options[d2].selected=true } //--> </script> </form><!-- --> </body> </html>

A voir également

Ajouter un commentaire

Commentaires

cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
disons qu'un zip contenant tou ce qu'il faut pour tester ton script aurait été bien. Avec notamment le fichier connexion.php, et le fichiers sq des tables que tu utilise. Et les commentaires en français c'est peut être trop demandé aussi?
cs_iomega
Messages postés
144
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
1 septembre 2008
-
Hello à vous tous,
Je suis d'accord avec wizad c'est pas très clair. Tu pourrai mettre aussi une bd.
A+
cs_glad
Messages postés
97
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
24 février 2012
-
Salut,

Alors ta source n'est pas unique si tu écris correctement déroulante :

http://www.phpcs.com/recherche.aspx?r=Liste+d%e9roulante+dynamique&tr=tout

Les commentaires sont en anglais car la source ne doit pas être de lui.
Dans ces cas là, c'est bien de citer la source... de la source :-)

A +
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

les commentaires en anglais, les tables en hollandais...c'est original ;-)
Expert...ahem. Pardonne-moi mais pour mettre le résultat de requêtes dans une liste...même dynamiquement, je trouve que tu passes par des chemins tortueux.
De plus, avec ce système, j'ose à peine penser ce que cela donne avec une vraie base de données, une grosse, en prod...
Pour ce qui est du code expert : le html pourrait être meilleur, les requêtes sql aussi (jamais de select *). Pour le php : si la connexion échoue, ton script continue...? pourquoi faire?
Enfin, ton code est strictement inutilisable en l'état. Pourquoi ne pas l'avoir généralisé ?? Surtout pour un code expert, tu aurais dû faire cet effort. Là, il ne sert strictement à rien. Et, pardonne-moi, mais c'est tellement le foutoir qu'on préfèrera le réécrire plutôt que de l'adapter.

Bref moi, j'aurais aimé si ça avait été mieux écrit, plus clair, sous forme de fonction, ou d'un objet gérant ce genre de besoins.
Mais là...ça n'a rien d'un code expert.
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
+1

"les commentaires en anglais, les tables en hollandais...c'est original ;-)"

Mdr... .. .

Sinon pele mêle... .. .

à quoi sert...

# if( ! $id_link ){
# //echo 'Cannot login';
# }else{
# //echo 'Succesfull conected to db';
# }

A rien... c'est des reste de code pour le débugage... à croire que le soit disant auteur du code ne comprend pas vraiment ce qu'il est censé avoir codé... .. .

Utiliser les simples quotes plutot que les doubles quotes dans tes echo... remplacer les while par des for augmentera la vitesse de traitement... vu que c'est possible autant en profiter... sinon mais ça n'engage que moi autant utiliser un echo plutot que de fermer php (puis le réouvrir) pour afficher trois trucs... .. .

Concernant les requetes sql comme l'a dit malalam éviter les "select *" et puis c'est bizar de faire des requetes en minuscules et majuscule...

"select * from provincies WHERE vr_sleutel="

o_Ô

"SELECT * FROM provincies WHERE vr_sleutel="

^_^

Concernant le html rapidement je dirait d'écrire les balise en minuscule et de remplacer
par
mais en même temps ce n'est pas le plus génant dans le code... .. .

@ tchaOo°

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.