[PHP- JS] affichage répertoire dans liste box
Résolu-CCM- Messages postés 930 Date d'inscription Statut Membre Dernière intervention -
Je veut faire un formulaire particulier, mais je but sur une partie très complexe et compliqué à la fois ....
Voici ce que je veut faire :
1. -------> choix d'une valeur dans ma listeboxA. (nom d'un répertoire, inscrit en dur dans le code)
2. -------> Ma listeboxB se charge automatiquement de valeurs en fonction de listboxA
3. Les valeurs de la listboxB sont variables et representent des répertoires contenus dans le dossier indiqué dans listboxA
Le 1 et 2 je sais faire, maintenant il faut que j'essai d'imbriqué une fonction de listage de répertoire dans ma fonction d'affichage de valeur !!!! soit imbriquer 3 dans 2.
Je ne sais pas faire ça, par contre je veu bien apprendre :)
Voici en gros mon code :
heade
<SCRIPT language=JavaScript>
//Changement de valeur de la deuxième liste déroulante //
liste=new Array();
liste[0] = new Array("Dossier70");
liste[1] = new Array("","dossier1","dossier2");
liste[2] = new Array("","dossier541","dossier52");
liste[3] = new Array("","Marion","dossier123","dossier45");
//fonction pour le changement de valeur de la deuxième liste déroulante //
function changeliste()
{ choix=document.getElementById("listeA").value;
t='<select name="listeB" id="listeB">';
for(i=0;i<liste[choix].length;i++)
{
t+="<option value=\""+liste[choix][i]+"\">"+liste[choix][i]+"</option>";
}
document.getElementById("listeB_div").innerHTML=t+'</select>';
}
</SCRIPT>
body
<SELECT id=listeA onchange=changeliste() name=listeA >
<OPTION value=0 selected></OPTION>
<OPTION value=1> rep1 </OPTION>
<OPTION value=2> rep2 </OPTION>
<OPTION value=3> rep3 </OPTION>
<OPTION value=4> rep4 </OPTION>
<OPTION value=5> rep5 </OPTION>
<OPTION value=6> rep6 </OPTION>
</SELECT>
<br/>
<br/>
<label for="dossier">Dossier :</label>
<br/>
<A id=listeB_div><SELECT id=listeB name=listeB></SELECT></A>
Sa marche très bien si les valeur "dossier1" "dossier2" "dossier4254" .... sont en dur, mais moi je veut que ces valeur soit dynamique en fonction des repertoires contenus dans rep1 rep2 rep3 ....
C'est faisable ??
Un petit coups de pouce svp ..
Merci a vous
- [PHP- JS] affichage répertoire dans liste box
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Affichage double ecran - Guide
- Expert php - Télécharger - Langages
- Liste déroulante en cascade - Guide
37 réponses
- 1
- 2
La problématique porte sur la mise à jour dynamique de la liste secondaire en fonction du choix effectué dans la première liste et des répertoires présents sur le serveur. Des solutions courantes passent par un script côté serveur (PHP) qui liste les répertoires du chemin sélectionné et alimente ensuite la liste B via une réponse ou un rendu côté client. En pratique, la valeur affichée dans listeB peut être générée par une vérification d'existence avec is_dir puis par mkdir en cas de besoin, en ajoutant des contrôles et débogage. Une nuance utile est d'envisager une interaction asynchrone ou une mise à jour du contenu via AJAX pour éviter le rechargement de la seconde liste et adapter dynamiquement le contenu.
- tu veux faire ça en quel langage ? Php ? Javascript ?
Si j'ai le choix, plutôt en php...
- les repertoires à lister sont sur ton Pc ou sur le serveur
Sur le serveur, mais je développe actuelement en local sur PC.
- ton script serra sur le serveur ou sur wamp ou Easyphp sur ton PC ?
Pour le moment sous easy php sur PC puis sur serveur Easy php
Comme tu as fait ça peut marcher en javascript mais ce n'est pas souple, il suffit qu'un des rep change, il faudra modifier ton script
C'est a dire ? Je n'ai rien fait pour le moment, c'est juste une liste de rep fictif que j'ai rentrer en dur...
Je veut tout supprimer ces valeurs pour que mes array soient remplit automatiquement...
J'ai une solution en tête dit moi si c'est propre et si sa se fait :
Dans ma BDD je stock le nom du Dossier (listBox1)
et les noms des repertoires (listBox2)
je peu tenter de faire une requete qui va me lister tout les repertoires avec un nom differents contenu dans Dossier1 (rep11 ; rep12 ; rep13; rep14; .... )
Et qui va me les inscrire dans ma listbox2
Un problème se pose :
Il faut que dès que je change de valeur ma listbox1, instantanément ma listbox2 se rafraichisse..... avec les requetes SQL ce n'est pas instantané il faut soit un bouton soit un refresh :(
C'est faisable ou pas le fait de rendre sa instantané ?
Mon idée ce tien ?
Sinon je ne peu pas profiter du clic sur le petit chevron (< vers le bas) pour commander l'execution de la requete pour la listbox2 ???
Merci
selectionner le nom de répertoire si le nom repertoire est different de ceux déja saisi from ma base where dossier = "dossier1"
En gros mon champs nom-èrepertoire contien beaucoups de nom-de repertoire parfois redondant !
je veut une liste en evitant cette redondance !!
je l'ai deja fait en cours mais sa remonte a très très loin .....
Merci
en metant tes rep dans une BDD le pb sera le mêm au moindre changement il faudra pense à modifier ta base.
En php tu peux lister les rep
un petit exemple:
<?php
$rep="repertoire a lister";
//chemin relatif vers le rep depuis le script
$chemin_rep="ton_chemin"."/".$rep;//tu completes ton_chemin pour mettre le chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
// ouvre le rep
$dp = opendir($chemin_rep);
$ListRep=array();;
while ( $entry = readdir($dp) )
{
// enleve les fichiers . et ..
if ($entry != '.' && $entry != '..'){ //si pas . et ..
if (is_dir($chemin_rep."/".$entry)){ //si c'est un repertoire
// on stockes dans un tableau
$ListRep[]=$entry;
}
}
closedir($dp);
//un petit coup de visualisation pour vérifier
echo "Les repertoires dans le ".$rep." :<br />";
print_r($ListRep);
?>
ensuite on pourra le modifier pour l'adapter à ton cas;
une liste qui permettra de choisir le rep à lister et le résultat s'affichera dans une autre
Les repertoires dans le Mon-REP :
Array ( )
Warning: readdir(): 3 is not a valid Directory resource in C:\Program Files\EasyPHP 2.0b1\www\repertoires.php on line 339
pourrais tu m'eclaircire stp ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questioncette cerreur veut dire que ton chemin vers le rep n'est pas bon
revois cette partie:
$rep="repertoire a lister"; //chemin relatif vers le rep depuis le script $chemin_rep="ton_chemin"."/".$rep;//tu completes ton_chemin pour mettre le chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
et donnes moi la partie de code correspondante
voici mon code :
HTML:
<SELECT id=listeA onchange=changeliste() name=listeA >
<OPTION value=0 selected></OPTION>
<OPTION value=1> Gris </OPTION>
<OPTION value=2> Rouge </OPTION>
<OPTION value=3> Maron </OPTION>
<OPTION value=4> Noir </OPTION>
</SELECT>
<br/>
<br/>
<label for="dossier">Sous Dossier :</label>
<br/>
<A id=listeB_div><SELECT id=listeB name=listeB></SELECT></A>
<br/>
<br/>
PHP
$chemin_rep="../couleurs";
// ouvre le rep
/****/echo "<script>alert('DEBUGAGE :: debut du script de listage des rep');</script>";
$dp = opendir($chemin_rep);
$ListRep=array();
while ( $entry = readdir($dp) )
{
if ($entry != '.' && $entry != '..')
{
if (is_dir($chemin_rep."/".$entry)) //si c'est un repertoire on stockes dans un tableau
{
$ListRep[]=$entry;
/*******/echo "<script>alert('DEBUGAGE :: milieu du script de listage des rep');</script>";
$rep=$_POST['listeB_div']; //affichage dans la deuxieme liste déroulante
}
}
closedir($dp);
//un petit coup de visualisation pour vérifier
print_r($ListRep);
//////////*******************************************************/////
///////**********************************************************/////
echo "<script>alert('DEBUGAGE :: fin du script de listage des rep');</script>";
//////////*******************************************************/////
///////**********************************************************/////
Résultat :
ma deuxieme liste déroulante est vide :(
<SELECT id=listeA onchange=changeliste() name=listeA >
mets:
<SELECT id="listeA" onChange="changeliste();" name="listeA" >
ensuite quelle est la fonction changeliste() ?
dans ton code PHP:
pourquoi passer par javascript /****/echo "<script>alert('DEBUGAGE :: debut du script de listage des rep');</script>";et pas tout simplement:
/****/echo "DEBUGAGE :: debut du script de listage des rep";
et tu ne peux pas afficher ta deuxièlme liste ainsi:
$rep=$_POST['listeB_div']; //affichage dans la deuxieme liste déroulante
@lain
Alors mon changeliste
function changeliste()
{ choix=document.getElementById("listeA").value;
t='<select name="listeB" id="listeB">';
for(i=0;i<liste[choix].length;i++)
{
t+="<option value=\""+liste[choix][i]+"\">"+liste[choix][i]+"</option>";
}
document.getElementById("listeB_div").innerHTML=t+'</select>';
}
C'etait pour modifier la valeur de la liste déroulante avec des valeurs en DUR dans le code ..
le petit code javascript c'est pour avoir un popup et non un message sur la page courante .. (c'est plus visible et sa "break" le code le temps de cliquer sur "OK" )
$rep=$_POST['listeB_div']; --> heuu c'est a dire ?
Je t'ai fait ce bout de code pour lister les sous rep pqui sont contenus dans le rep de la couleur chosie listeA
c'est bien ça que tu voulais ?
<html>
<body>
<form name="form1" method="post" action="liste_rep.php">
<select name="listeA" id="listeA" onChange="document.form1.submit();" >
<option value="0" >Choisissez</option>
<option value="Gris" <?php if(isset($_POST['listeA']) AND $_POST['listeA']=="Gris"){echo "selected"; } ?> > Gris </option>
<option value="Rouge" <?php if(isset($_POST['listeA']) AND $_POST['listeA']=="Rouge"){echo "selected"; } ?> > Rouge </option>
<option value="Maron" <?php if(isset($_POST['listeA']) AND $_POST['listeA']=="Maron"){echo "selected"; } ?> > Maron </option>
<option value="Noir" <?php if(isset($_POST['listeA']) AND $_POST['listeA']=="Noir"){echo "selected"; } ?>> Noir </option>
</select>
<br/>
<br/>
<?php
if(isset($_POST['listeA']) AND $_POST['listeA'] != "0"){
//on n'affiche la partie sous rep que lorsque le formulaire avec la liste A a été posté
$chemin_rep="../couleurs";
// ouvre le rep correspondant a la couleur choisie dans la liste A
$dp = opendir($chemin_rep."/".$_POST['listeA']);
$ListRep=array();
//si j'ai bien compris tu veux listes les sous rep qui sont sous les rep Gris, Rouge, etc...
while ( $entry = readdir($dp) ) {
if ($entry != '.' && $entry != '..'){
if (is_dir($chemin_rep."/".$_POST['listeA']."/".$entry)){ //si c'est un repertoire on stocke dans un tableau
$ListRep[]=$entry;
}
}
}
closedir($dp);
//un petit coup de visualisation pour vérifier a supprimer ensuite
//print_r($ListRep);
?>
<br/>
<br/>
<label for="dossier">Sous Dossier :</label>
<br/>
<select name="listeB" id="listeB" >
<?php
for ($i=0;$i<sizeof($ListRep);$i++){
echo "<option value=".$ListRep[$i].">".$ListRep[$i]."</option>";
}
?>
</select>
<br/>
<br/>
<?php
}
?>
</form>
</body>
</html>
c'est pour un intranet, il n'y a donc pas de site ....
je vais essayer d'etre claire avec un exemple tout simple :
J'ai donc deux liste deroulante :
Le premier contient une liste de repertoire heberger sur mon site.
Les valeur y sont codées en dur ... pas de souci .
----> addmetont que l'on à ici comme valeur "dossier peugeot" ; "dossier audi" ; "dossier bmw".
|----------------------------|--|
| DossIer BMW |V|
|----------------------------|--|
Le second dossier liste tout les répertoire contenu dans le dossier "Dossier BMW"; une fonction va aller voir, scruter et lister tout les dossier..
ici nous avons par exemple "DossIer série 3 "."DossIer série 5 " "DossIer série 6 ". "DossIer série 7 "....
Si je rajoute demain un repertoire "DossIer série 1 ". dans le répertoire "dossier bmw" il doit apparaitre dans la liste déroulante ci dessou ....
|----------------------------|--|
| DossIer série 5 |V|
|----------------------------|--|
Voici les fichier dans mon mini site :
+ index.php
+ Repertoire1
- Sousrepertoire1-1
- Sousrepertoire1-2
+ Repertoire2
+ Repertoire3
- Sousrepertoire3-1
- Sousrepertoire3-2
+ Repertoire4
Voici le code qu'il faut mettre dans "index.php" :
<html>
<body>
Dossier :
<?php
//chemin relatif vers le rep depuis le script
$chemin_repertoire = "./";//tu completes ton_chemin pour mettre le chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
echo "
<form action='index.php' method='POST'>
<select onchange='submit()' name='listeA'>
<option selected></option>
";
$dp = opendir($chemin_repertoire); // ouvre le rep
while ( $entrer = readdir($dp) )
{
// enleve les fichiers . et ..
if ($entrer != '.' && $entrer != '..'){ //si pas . et ..
if (is_dir($chemin_repertoire."/".$entrer)){ //si c'est un repertoire
echo "<option value='$entrer'"; if(isset($_POST['listeA'])) { if($_POST['listeA'] == $entrer) { echo " selected"; }} echo ">$entrer</option>";
}
}
}
closedir($dp);
echo "
</select>
</form>
";
?>
Sous-Dossier :
<?php
if (isset($_POST['listeA'])) {
$repertoire = $_POST['listeA'];
//chemin relatif vers le rep depuis le script
$chemin_repertoire = "./".$repertoire."/";//tu completes ton_chemin pour mettre le chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
echo "
<form action='index.php' method='POST'>
<select onchange='submit()' name='listeB'>
";
$dp = opendir($chemin_repertoire); // ouvre le rep
while ( $entrer = readdir($dp) )
{
// enleve les fichiers . et ..
if ($entrer != '.' && $entrer != '..'){ //si pas . et ..
if (is_dir($chemin_repertoire."/".$entrer)){ //si c'est un repertoire
echo "<option value='$entrer'>$entrer</option>";
}
}
}
closedir($dp);
echo "
</select>
<input type='hidden' name='listeA' value='".$_POST['listeA']."'>
</form>
";
}
?>
</body>
</html>
Voila j'espere que sa te convien, en plus mon programme varie en fonction des Repertoires ET des sous repertoires ;)
Mais il est pas aussi performant que Wamp ou EasyPhp, mais c'est mieu que rien ;)
tu as même fait un peu plus que ce que je voulais .... (le listage des repertoires dans la 1er liste déroulante )
je vais garder cette fonction c'est toujours plus utile d'avoir tout en dynamique.
Je vais adapté tout sa .... et voir ce que sa donne avec les "espaces" et les accents..
Franchement chapeau !!
un grand MERCI a vous deux c'est sympa de m'avoir aider, j'ai galerer sur ce point la !!!!
je ne vois pas d'ou sa vient
- 1
- 2
petites précsions:
- tu veux faire ça en quel langage ? Php ? Javascript ?
- les repertoires à lister sont sur ton Pc ou sur le serveur
- ton script serra sur le serveur ou sur wamp ou Easyphp sur ton PC ?
Comme tu as fait ça peut marcher en javascript mais ce n'est pas souple, il suffit qu'un des rep change, il faudra modifier ton script
@lain