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 17 001 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

Messages postés
16
Date d'inscription
lundi 8 décembre 2003
Statut
Membre
Dernière intervention
4 août 2009

j encourage vivement vandenplasfrederic fait t es code comme il te semble aide nous partagon notre savoir fair et oublie seux qui ne save que critiquer , pour moi en es tous inspirer en a tous apriss un jour et en aprend toujour c es sa la magie de l informatique.
pour ceux qui cherche le fichier conexion.php ou sql si vous comprener le code cree vous meme votre base et sa conexion.
eviter de pleurnicher chaque foi ecriver qulque chose de constructive et oublier les comentaire comme maj min c es valable pour une dicte pas pour un code php
Messages postés
6
Date d'inscription
vendredi 11 novembre 2005
Statut
Membre
Dernière intervention
21 août 2006

Quelques réponses sur les commentaires du code :
Puisque programmer est 99% anglais je n'ai pas choisis de commenter en français
Un 'select * ' est défendable si on employe tout les champs dans la table
Le néerlandais est ma langue mère donc les tables et les données dedans sont dans cette langue
Mes commentaires sont toujours écris en anglais puisque c'est assez universel
Le code BODY ON LOAD sert à sélectioner les dans les combo's les valeurs passées par un form par exemple ou à être utilisé comment sélection par defaut
mysql_fetch_Assoc() est une option, mais ici il falait absolument que je gère mes indexes moi-même
Le tout était de de donner la possibilité à d'autres de montrer le chemin de faire un multiple box de choix
Je mettrai un lien ici pour faire voire comment le code fontionne
Sincérement
Messages postés
76
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
12 mars 2009

Bon perso, j'ai fait une soure sur ca, qu eje n'ai pas posté pour un moteur de recherche et c'est pas pour etre pessimiste, mais c'est vraiment le carnage ton truc!!!

Déjà, à la base, le onload dans body, ne sert strictement à rien, tu utilises JS, et c'est complètement le bordel, moi je te fais ca, rien qu'avec un <select name on change ....>

}
$z=$z+1;
$y=0;
$m=$m+1;
}

ca veut pas dire grand chose non plus.

Pour te consieller tape toutes les valeurs dans des arrays, ce sera nettement plus facile , car utilisera mysql_fetch_Assoc()

C'est très mal commenter, jparie que tu as meme pas compris toute la source, dommage pour toi :(

Fin je sais pas mais si c'est pour mettre les sources des autrres, bah autant rien mettre ;)

Sur ce bonne fin de journée :)

guismo1er
Messages postés
2
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
20 février 2006

hello
mais comment implémenter 4 listes de choix
Messages postés
1293
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°
Afficher les 9 commentaires

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.