[PHP- JS] affichage répertoire dans liste box

Résolu/Fermé
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 - 31 juil. 2008 à 15:51
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 - 1 sept. 2008 à 15:20
Bonjour,

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

37 réponses

-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
1 août 2008 à 10:17
Bonjour tout le monde je creuse toujours mais je ne sais pas si c'est faisable ?
En passant par une base de donné pour stocker la valeur des dossier puis les listé, sa se fait ???
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
1 août 2008 à 11:35
Salut,

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
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
1 août 2008 à 11:53
salut ,


- 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
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
1 août 2008 à 16:00
Comment faire une requete sql pour dire :


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
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
1 août 2008 à 18:46
Salut,

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
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
4 août 2008 à 10:31
salut merci pour ton code je l'ai adapté mais je bute sur une erreur :



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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
5 août 2008 à 14:00
personne ? vous êtes tous en vacances??
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
11 août 2008 à 15:30
Ben oui un peu des vacanse,

cette 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
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
11 août 2008 à 15:38
Ben oui un peu des vacanse,
La chanceeeeeeeeeuuu


merci et si je veut les lister dans un champs liste déroulante je fais comment ?
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
11 août 2008 à 16:41
a la place de $rep="repertoire a lister";

tu fais:

$rep=$_POST['le_name_de_ta_liste_deroulante'];
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
18 août 2008 à 16:05
salut alain, merci pour ton script, mais malgrés les modification je n'arrive pas a l'utiliser :(
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 :(
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
18 août 2008 à 16:23
j'ai trouver ce post mais les liens sont morts ...
http://www.creation-du-web.com/...
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
19 août 2008 à 17:39
Me revoilà:

<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
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
20 août 2008 à 11:19
Re merci pour ton post.

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 ?
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
21 août 2008 à 13:38
doit je enlever ma fonction changelist ???
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
21 août 2008 à 16:54
Bon ben me revoilà de ce côté.

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>	 
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84 > Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
21 août 2008 à 16:59
merci beaucoups, je test tout de suite ....
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902 > -CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013
21 août 2008 à 17:08
Attention dans la listeA

<option value="Gris"....

value doit correspondre au nom exact de ton repertoire

par contre tu peux mettre ce que tu veux entre <option ......> et </option>
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84 > -CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013
21 août 2008 à 17:09
@lain je n'arrive pas a afficher ma deuxieme liste déroulante ..

sa doit bloquer a ce niveau :


		<select name="listeB" id="listeB_div" >
		
<?php	 
		for ($i=0;$i<sizeof($ListRep);$i++)
		{
			echo "<option value=".$ListRep[$i].">".$ListRep[$i]."</option>";
		}
?>	 
		</select>
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84 > -CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013
21 août 2008 à 17:32
en faite des que je choisi une des valeurs, je suis rediriger vers la page liste_rep.php que je n'ai pas :/.
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
21 août 2008 à 16:58
lol, merci BlackDrag00n,

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|
|----------------------------|--|
0
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
21 août 2008 à 17:01
je suis en train de travailler dessus tous en php
0
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
21 août 2008 à 17:35
Alors voila mon systeme a moi :

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 ;)
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
21 août 2008 à 22:06
Merci a toi des que je peu j'essai !!
0
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
22 août 2008 à 08:25
Si tu a un intranet ou autre, donc pas la possibilité d'insaller de logiciel, je te recommande Mov'amp ce petit logiciel ne necessiste aucune installation et permet d'utiliser un serveur PHP et MYSQL.

Mais il est pas aussi performant que Wamp ou EasyPhp, mais c'est mieu que rien ;)
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
22 août 2008 à 09:56
salut je viens d'essayer ton code ... impressionant !!
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 !!!!
0
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
22 août 2008 à 10:25
de rien ;)
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
22 août 2008 à 10:26
le seul petit souci c'est que lorsque je choisi une valeur dans ma listbox 2, il y a un rafraichissement qui se fait automayiquement et sa me remet la première valeur ;(

je ne vois pas d'ou sa vient
0
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
22 août 2008 à 10:37
je les pas fait entierement car aprés je sais pas ce que ton site va faire, mais regarde comment est fait le rafraichissment de la premiere listbox pour faire pareil pour le deuxieme
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
22 août 2008 à 10:43
au contraire je ne veu pas de rafraichissement dans la deuxieme listbox ... sinon je ne pourrais pas sélectionner de valeur ... :(

ok je replonge dans mon code pour essayer de trouver comment eviter ça !
0