[PHP- JS] affichage répertoire dans liste box [Résolu/Fermé]

Signaler
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
-
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
-
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

Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 ???
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 ?
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
personne ? vous êtes tous en vacances??
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Ben oui un peu des vacanse,
La chanceeeeeeeeeuuu


merci et si je veut les lister dans un champs liste déroulante je fais comment ?
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
a la place de $rep="repertoire a lister";

tu fais:

$rep=$_POST['le_name_de_ta_liste_deroulante'];
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 :(
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
j'ai trouver ce post mais les liens sont morts ...
http://www.creation-du-web.com/...
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 ?
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
doit je enlever ma fonction changelist ???
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
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>	 
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79 >
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017

merci beaucoups, je test tout de suite ....
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873 >
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013

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>
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79 >
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013

@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>
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79 >
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013

en faite des que je choisi une des valeurs, je suis rediriger vers la page liste_rep.php que je n'ai pas :/.
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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|
|----------------------------|--|
Messages postés
34
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
5 août 2011
8
je suis en train de travailler dessus tous en php
Messages postés
34
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
5 août 2011
8
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 ;)
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Merci a toi des que je peu j'essai !!
Messages postés
34
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
5 août 2011
8
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 ;)
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 !!!!
Messages postés
34
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
5 août 2011
8
de rien ;)
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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
Messages postés
34
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
5 août 2011
8
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
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
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 !