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

Résolu
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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. apparament c'est mon return qui me rendrais fou.
    Sa sortais de ma fonction sans même faire la suite des instruction !!
    1. oups j'ai zapper une ligne de code ..

      if(empty($listeB) AND !empty($new_rep))
      	{	$content_dir= '../docs/'.$type.'/'.$new_rep.'/';
      		$dossier=$new_rep;                               
                      if(is_dir($content_dir)) 
                        {	echo "<script>alert('......');</script>"; }
      	        else
                      {	if(mkdir($content_dir)) 
      	               {  
      	                echo "<script>alert('DEBUG  fin makdir ');</script>";	
      	                return true;	
      	               }
                             else  
      	              {	echo "<script>alert('Erreur inconnu lors de la création du répertoire $new_rep');</script>"; }
      		}
                      echo "<script>alert(' DEBUG  debut copie document');</script>";	
              }
      		
      // SCRIPT  DE    COPIE DE DOCUMENT 
      echo "<script>alert(' DEBUG ');</script>";	
      $tmp_file = $_FILES['fichier']['tmp_name'];
      if( !is_uploaded_file($tmp_file) )
             {
      	echo "<script>alert('DEBUG  Fichier introiuvable');</script>";	
      	exit("Le fichier est introuvable");
      	}
      


      mon accolade n'est pas orpheline ..
      1. // si le chemin existe déja --> message d'erreur
        if(is_dir($content_dir)) 
        {	echo "<script>alert('Dossier déjà existant : le fichier à été copié dans le répertoire existant.');</script>"; 
        			//return true;
        }
        	else
        // sinon creer dossier
        {	if(mkdir($content_dir)) 
        	{  
        		
        	echo "<script>alert('DEBUG  fin makdir ');</script>";	
        	return true;	
        	}
        else 
        	{	echo "<script>alert('Erreur inconnu lors de la création du répertoire $new_rep');</script>";}
        			}
        echo "<script>alert(' DEBUG  debut copie document');</script>";	
        }
        		
        // SCRIPT  DE    COPIE DE DOCUMENT 
        			
        		echo "<script>alert(' DEBUG ');</script>";	
        					
        		$tmp_file = $_FILES['fichier']['tmp_name'];
        			
        		if( !is_uploaded_file($tmp_file) )
        		{
        		echo "<script>alert('DEBUG  Fichier introiuvable');</script>";	
        		exit("Le fichier est introuvable");
        		}
        


        dans cette portion de code, pourquoi le pop up "DEBUG fin makdir " s'affiche bien mais 'DEBUG debut copie document' ne s'affiche pas lors de la création d'un dossier ???
        1. le voici :

          		$tmp_file = $_FILES['fichier']['tmp_name'];
          			
          		if( !is_uploaded_file($tmp_file) )
          		{
          		   exit("Le fichier est introuvable");
          		}
          1. pour aller plus loin dans mon probleme je vien de constater que :

            - le dossier est bien créé avec mon script, il est existant est visible dans mon /www/

            - le fichier n'y est pas copié a l'interieur (le dossier est vide)
            - le dossier n'est pas enregistré dans ma base de données (ce que je fait normalement a tout mes dossier) du coups je ne le voit pas via mes pages html .(script de listage des répertoire via un champs bdd)...
            1. quel est ton code d'enregistrement du fichier dans le rep ?
          2. salut, je crée mon dossier grace a un script.
            Non ce n'est pas une question de droits, avant mon script marchais :(

            {	if(mkdir($content_dir)) 
            				{  
            				return true;	
            				}
            				else 
            				{	echo "<script>alert('Erreur inconnu lors de la création du répertoire $new_rep');</script>"; }
            			}
            
            1. alors c'est un pb de chemin vers ton repertoire ou tu veux écrire
          3. Bonjour,

            personne ne peu m'aider s'il vous plaît ?

            j'ai toujours l'erreur :
            Notice: Undefined index: fichier in C:\.....\index.php on line 340

            la ligne 340 contient :

            340 :$tmp_file = $_FILES['fichier']['tmp_name'];
            341:
            342: if( !is_uploaded_file($tmp_file) )
            343: {
            344: exit("Le fichier est introuvable");
            }
            // infos sur le fichier
            $nom = $_FILES['fichier']['name']; // nom complet du fichier: "fichier.doc"
            $type_file = $_FILES['fichier']['type']; // application associé. : "application/msword"
            $extension = strstr($_FILES['fichier']['name'], '.'); ....

            Merci à vous, la je seche :(

            1. Salut,

              c'est bizarre car ça a l'air correct ton champ <input typ="file" du formulaire abien comme name="fichier"

              essayes de faire un print_r($_FILES); pour voir ce que tu as dans ces variables globales

              @lain
            2. ou alors mets:

              if(isset($_FILES['fichier']){$tmp_file = $_FILES['fichier']['tmp_name'];}
            3. @Alain_42salut alain, tu vas bien ??

              Merci, l'erreur venais de mon <form>

              voici comment il était :

              <form action='index.php' method='POST' >

              je l'ai edité de cette façon:

              <form action='index.php' method='POST' enctype='multipart/form-data'>

              sa va beaucoup mieux... le seul souci maintenant c'est lors de la création d'un nouveau dossier, le fichier n'y est pas copiée ...
            4. @-CCM-Salut,

              oui ça va

              effectivement il manquait le type de codage spécifique dans le cas ou on utilise le type ="file"

              le seul souci maintenant c'est lors de la création d'un nouveau dossier, le fichier n'y est pas copiée ...

              comment cree tu le nouveau dossier ?

              il faut qu'il ait les bons droits

              si tu le crée par un script php par mkdir() il aura les droits du propriétaire donc Apache

              et tu pourras y enregistrer tes fichiers par un script PHP (Apache) sans pb

              @lain
          4. en faite j'ai un souci avec plusieurs pages contenant " $type_file = $_FILES['fichier']['type']; " !!
            je ne peu plus uploader mes fichiers ... depuis la modif du code.
            1. Se qui serai bien c'est que tu donne ton code complet en expliquand ce que tu veux exactement sa serai plus simple pour te guidé ;)
              1. salut, voici mon code :

                <div id="contenu_admin">
                     <!--  titre--> 
                	<p align="center"><span class="titre_cat">.:: Ajouter un fichier ::.</span></p>
                	<span class="libel">
                	
                	
                	
                	
                Type :
                <br/>
                
                <?php
                /***********************************************************************************************************************/
                /*******************             SCRIPT         DE       LISTAGE    DES  REPEROIRES    EXISTANTS         ********************************/
                /************************************************************************************************************************/
                
                	//chemin relatif vers le rep depuis le script
                	$chemin_repertoire = "../docs/";
                	echo "
                	<form action='index.php' method='POST'>
                	<select onchange='submit()' name='listeA'>
                	<option selected></option>
                	";
                	$dp = opendir($chemin_repertoire); // ouvre le repertoire
                	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>
                	";
                ?>
                <br/>
                <br/>
                Dossier :
                <br/>
                
                <?php
                	if (isset($_POST['listeA'])) 
                	{
                		$repertoire = $_POST['listeA'];
                		//chemin relatif vers le rep depuis le script
                		$chemin_repertoire = "../docs/".$repertoire."/"; //chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
                		echo "
                		<form action='index.php' method='POST'>
                		<select onchange='submit()' name='listeB'>
                		<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['listeB'])) 
                					{if($_POST['listeB'] == $entrer) 
                						{echo " selected"; }
                					} echo ">$entrer</option>";
                				}
                			}
                		}
                		closedir($dp);
                		echo "</select>
                		<input type='hidden' name='listeA' value='".$_POST['listeA']."'>
                		";
                	}
                ?>
                
                	 
                	 <br/>
                	 <br/>
                	 <label for="new_rep">Ou nouveau dossier :</label><br />
                	 <input type="text" name="new_rep" value= "" size="20"/>
                	 <br/>
                     <br/>
                	 <label for="docdate">Date du document :</label><br />
                	 <input type="text" name="docdate" value="" size="10"/>
                	 <br/>
                	 <br/>
                	 <label for="pubdate">Date de publication :</label><br />
                	 <input type="timestamp" name="pubdate" value="<?php echo date('d-m-Y')?>" size="10"/><br>
                	 <br/>
                	 <label for="titre">Titre du fichier :</label><br />
                	 <input type="text" name="titre" value= "" size="45"/><br>
                	 <br/>
                	 <label for="description">Description :</label><br />
                     <textarea cols="35"name="description" id="description"></textarea><br />
                	 <br/>
                	 <label for="langue">Langue :</label><br />
                	 <select name="langue">
                     <option>Français</option>
                	 <option>Anglais</option>
                     <option>Italien</option>
                	 <option>Allemand</option>
                	 <option>Russe</option>
                	 <option>Chinois</option>
                     </select>
                	 <br/>
                	 <br/>
                	 <label for="fichier">Rattacher :</label><br />
                	 <input type="file" name="fichier" size="30"><br>
                	 <br/>
                	 <label for="mot_clef">Mots clefs rattaché au document :</label><br />
                	 <input type="text" name="mot_clef" value="" size="45"/><br>
                	 <br/>
                	 <input type="submit" name="envoi" value="Envoyer"><br></span>
                
                	 </span>	
                </form>
                </div>
                
                
                
                
                
                <!--- 	SCRIPT D ENVOI DES INFORMATIONS ET DU FICHIER  ( UPLOAD) -->
                <?php
                
                include '../fonctions.php'; 	// necessaire pour faire appel aux fonctions contenus dans ce fichier
                
                if( isset($_POST['envoi']) )// si formulaire envoyé
                	{
                			
                	/*
                	//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx champs de récuperation de valeur  88888888888888888888888888888888888888/	
                	echo "<input type='text' name='A' value='".$_POST['listeA']."'>";
                	echo "<input type='text' name='B' value='".$_POST['listeB']."'>";
                	
                	$type=$_POST['A'];	// récuperer le type 
                	$doss=$_POST['B'];	// récuperer le dossier
                	
                	//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  DEBUG nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/
                	echo "<script>alert('ALERT PHP SCRIPT 1 :  _____type=$type ____ Dossier= $doss.');</script>"; 
                	*/
                	
                	
                	// récuperer la date de publication 
                	if(isset($_POST['pubdate']))      
                		$pubdate=$_POST['pubdate'];
                	else $pubdate="";
                	
                	// récuperer la date d'edition du document
                	if(isset($_POST['docdate']))      
                		$docdate=$_POST['docdate'];
                	else $docdate="";
                	
                	// conversion du format de date jj-mm-aaaa en aaaa-mm-jj pour le stockage dans la base de données au format date
                	function dateFRenMySQL ($jour) //$jour au format JJ-MM-AAAA
                	{return substr($jour,6,4).substr($jour,3,2).substr($jour,0,2);} //renvoie la date au format AAAA-MM-JJ
                	$pubdate= dateFRenMySQL ($pubdate);
                	$docdate= dateFRenMySQL ($docdate);
                		
                	// récuperer le nom du nouveau dossier si il en existe un
                	if (isset($_POST['new_rep']) )
                		{$new_rep=$_POST['new_rep'];}
                	else $new_rep="";
                	
                	// récuperer la valeur de la liste déroulante 1 (type de document) 
                	if (isset($_POST['listeA']) )
                		{$type=$_POST['listeA'];}
                	else $type="";
                	
                	// récuperer la valeur de la liste déroulante 2 (dossier)	
                	if (isset($_POST['listeB']) )
                		{$listeB=$_POST['listeB'];}
                	else $listeB="";
                		
                	// récuperer  le titre
                	if (isset($_POST['titre']) )
                		{$titre=$_POST['titre'];
                		$titre=addslashes($titre);}
                	else $titre="";
                	
                	// récuperer la description en echappant les guillemets --> ' '
                	if (isset($_POST['description']) )
                		{$description=$_POST['description'];
                		$description=addslashes($description);}
                	else $description="";
                	
                	// récuperer la langue du document en remplaçant les ç par c  (pour le français)
                	if (isset($_POST['langue']) )
                	$langue=$_POST['langue'];
                	else $langue="";
                	$langue = str_replace ( 'ç' , 'c' , $langue); 
                	
                	//récuperer les mots clefs en echappant les guillemets --> ' '
                	if (isset($_POST['mot_clef']) )
                		{$mot_clef=$_POST['mot_clef'];
                		$mot_clef=addslashes($mot_clef);}
                	else $mot_clef="";
                
                	
                	
                
                //DEBUG // /*******************//////*************************////////*******************//////////*********************//
                echo "<script>alert('MES VALEURS :::  type/listeA=($type) listeB=($listeB) nouveau repertoire=($new_rep) docdate=($docdate) titre=($titre) description=($description) langue=($langue) mot clé=($mot_clef) date publication=($pubdate)  ');</script>";	
                	
                	
                	
                	
                /*************************************************************************************************/	
                /************************ SCRIPT  DE    CREATION    ET  DE   TEST    DOSSIER      **********************/
                /*************************************************************************************************/	
                
                	// On vérifie si un des champs est vide 
                //	if(empty($type) OR empty($docdate) OR empty($titre) OR empty($description) OR empty($langue) OR empty($mot_clef)) 
                //    { 	echo '<font color="red">Merci de remplir tout les champs !</font>'; 
                //	}
                	//Si tout les champs sont remplits, on commancer le traitement des informations
                //	else
                //	{	//  si le champs "dossier" n'est pas vide  --> le chemin sera " .../docs/type/listeB/document.doc "
                		if(!empty($listeB))
                		{ 	$content_dir= '../docs/'.$type.'/'.$listeB.'/';
                			$dossier=$listeB;     //on stock la valeur de la liste déroulante B dans une variable
                		}
                		//  si les champs "dossier"  et "nouveau dossier"  sont vides  --> message d'erreur
                		if(empty($listeB) AND empty($new_rep))
                		{	exit ("<script>alert('Créez ou selectionnez un dossier.');</script>");
                		}
                		//  si le champs "nouveau dossier" n'est pas vide et le champs "dossier" est vide  --> tenter la création de dossier"
                		if(empty($listeB) AND !empty($new_rep))
                            // le chemin par defaut est ../docs/type/nouveau dossier/ 
                		{	$content_dir= '../docs/'.$type.'/'.$new_rep.'/';
                			$dossier=$new_rep;                               //on stock la valeur de la liste déroulante B dans une variable
                			// si le chemin existe déja --> message d'erreur
                			if(is_dir($content_dir)) 
                			{	echo "<script>alert('Dossier déjà existant : le fichier à été copié dans le répertoire existant.');</script>"; 
                				//return true;
                			}
                			else
                			// sinon creer dossier
                			{	if(mkdir($content_dir)) 
                				{  return true;	}
                				else 
                				{	echo "<script>alert('Erreur inconnu lors de la création du répertoire $new_rep');</script>"; }
                			}
                		}
                		/**********************************************************************************/
                		/************************ SCRIPT  DE    COPIE DE DOCUMENT     **********************/	
                		/**********************************************************************************/
                		
                		$tmp_file = $_FILES['fichier']['tmp_name'];
                			
                		if( !is_uploaded_file($tmp_file) )
                		{
                		   exit("Le fichier est introuvable");
                		}
                		// infos sur le fichier
                		$nom = $_FILES['fichier']['name'];   	 // nom complet du fichier: "fichier.doc"
                		$type_file = $_FILES['fichier']['type']; // application associé.    : "application/msword"
                		$extension = strstr($_FILES['fichier']['name'], '.'); 
                		$extension = str_replace ( '.' , '' , $extension);// extension du fichier: "doc" 
                		
                		// On autorise uniquement l'upload des fichiers portant l'une des extensuions suivante :
                	    if ($extension != 'doc' && 
                		   $extension !='docx' && 
                		   $extension != 'xls' && 
                		   $extension != 'txt' &&
                		   $extension != 'rtf' && 
                		   $extension != 'pdf' && 
                		   $extension != 'ppt' &&
                		   $extension != 'gif' && 
                		   $extension != 'jpg' && 
                		   $extension != 'png')
                		  {	
                			 exit("Ce fichier n'est pas téléchargeable.");
                		  }
                		  	   else
                		  {
                			if( !move_uploaded_file($tmp_file, $content_dir . $nom) )
                			{  
                				exit("Impossible de copier le fichier dans $content_dir");
                			}
                			// si l'upload c'est bien passé, on réalise la mise a jour des infos dans la base
                			else
                			{
                				include '../connex.php';    //les variables de connexion host user passwd et bdd sont sur une autre page	 	
                											// Connexion au serveur et à la base de données
                				mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
                				mysql_select_db($bdd) or die("erreur de connexion a la base de donnees"); 
                	 					// on insert les données
                				$sql1 ="INSERT INTO `docs` ( `type` , `titre` , `description` , `nom_fichier` , `langue` , `format` ,    `mots_clefs` , `docdate` , `pubdate`, `dossier`) 
                									 VALUES('$type', '$titre' , '$description', '$nom',        '$langue',  '$extension', '$mot_clef',   '$docdate', '$pubdate','$dossier')";
                		
                				mysql_query($sql1) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
                				echo "<script>alert('          .:: INFORMATIONS MISES À JOUR ::.');</script>";
                				
                				// On se déconnecte de MySQL
                				mysql_close();
                			}	
                		}
                //	}	
                }
                ?>
                
                </div>
                <!--  FIN de la mise en page FOND --> 
                
                </body>
                </html>
                


                -Je veux recuperer les valeur de mes deux liste déroulantes, les mettres dans des variables pour les stocké dans ma base de données.
                Ces valeurs serviront à construire un url : listeA/listeB/nom_document.doc
                -Voila !! Je but essentielement sur l'imbrication d'html dans du php et sur les <form>. :s

                Actuellement, avec ce code je récupère bien mes valeur, mais le script d'upload de fichier ne marche plus :(
                Notice: Undefined index: fichier in C:\Program Files\EasyPHP 2.0b1\www\admin\index.php on line 340
                Le fichier est introuvable


                Merci :)
            2. salut !

              Donc maintenant je veut récupérer les valeurs de mes liste deroulante, j'ai lu des tutaux concernant la visibilité des variables...
              mais j'ai un code source de cette sorte

              <html>
              ..
              <?php code php ... ?>
              ..
              ..
              ..
              <?php ICI IL Y A MES CHAMPS

              if (isset($_POST['listeA']))
              {
              $repertoire = $_POST['listeA'];
              //chemin relatif vers le rep depuis le script
              $chemin_repertoire =...............


              ?>
              ..
              html
              html
              html
              ..
              <?php ICI JE VEUT RECUPERER LA VALEUR DES CHAMPS

              if( isset($_POST['envoi']) )// si formulaire envoyé
              {

              // récuperer la date de publication
              if(isset($_POST['listeA']))
              $listeA=$_POST['listeA'];


              ?>
              ..
              html
              html
              html
              ..
              .
              </html>

              donc pour le passage de varleur, je ne vois pas trops comment faire :s
              1. voila le code "complet" entre guillement car la cette version ne te cosera plus le souci de la selection qui se barre ;) lol

                <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'"; if(isset($_POST['listeB'])) { if($_POST['listeB'] == $entrer) { echo " selected"; }} echo ">$entrer</option>";
                }
                }
                }
                closedir($dp);
                echo "
                </select>
                <input type='text' name='listeA' value='".$_POST['listeA']."'>
                </form>
                ";
                }
                ?>

                Sous Sous-Dossier :
                <?php
                if (isset($_POST['listeB'])){
                echo "
                </select>
                <input type='text' name='listeB' value='".$_POST['listeB']."'>
                </form>
                ";
                }
                ?>

                je pas en week end donc si ton probleme et toujours pas resoilu je t'aiderai lundi ;) +++

                1. Merci c'est sympa !!!

                  je bossais sur un truc du genre

                  echo "
                  		<form action='index.php' method='POST'>
                  		<select onchange='submit()' name='listeB'>";
                  		
                  		if (isset($_POST['listeB'])) 
                  			{echo "<option value='$entrer'</option>"; }
                  		else
                  			{echo"<option selected></option>";}
                  


                  En faite j'ai du mal a traduire l'algorithmie en code php html :s
                  J 'essai ton code de suite.

                  Passe un bon week end, merci encore a++
                  ;)
              2. regarde cette ligne la :

                echo "<option value='$entrer'"; if(isset($_POST['listeA'])) { if($_POST['listeA'] == $entrer) { echo " selected"; }} echo ">$entrer</option>";

                toute les infos sont dedans, la je te le fait pour le moment cherche ;)
                1. ok je cherche , je cherche depuis le 31 juillet a 15H51 et 20 sec !!!! :D

                  Dernière version du code :

                  
                  Type :
                  <?php
                  	//chemin relatif vers le rep depuis le script
                  	$chemin_repertoire = "../test/";//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>
                  	";
                  ?>
                  
                  
                  Dossier :
                  <?php
                  	if (isset($_POST['listeA'])) 
                  	{
                  		$repertoire = $_POST['listeA'];
                  		//chemin relatif vers le rep depuis le script
                  		$chemin_repertoire = "../test/".$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'>
                  		<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'>$entrer</option>";
                  				}
                  			}
                  		}
                  	closedir($dp);
                  	echo "
                  	</select>
                  	<input type='text' name='listeA' value='".$_POST['listeA']."'>
                  	</form>
                  	";
                  	
                  	
                  	
                  	echo "
                  		<form action='index.php' method='POST'>
                  		";
                  	if (isset($_POST['listeB']))
                  		{	echo "
                  			</select>
                  			<input type='text' name='listeB' value='".$_POST['listeB']."'>
                  			</form>
                  			";
                  		}
                  	
                  	}
                  	
                  		// récuperer le type 
                  	if(isset($_POST['listeA']))      
                  		$type=$_POST['listeA'];
                  	else $type="";
                  	
                  	// récuperer le dossier 
                  	if(isset($_POST['listeB']))      
                  		$doss=$_POST['listeB'];
                  	else $doss="";
                  	
                  	echo "<script>alert('_____type=$type ____ Dossier= $doss.');</script>"; 
                  		
                  ?>
                  


                  Mais j'aurais des souci avec mes <form> par la suite, car j'ai après un bouton "envoyer" qui est censé me récupérer les valeur des listes déroulant et les mettre dans des variables pour en faire un url .... ce bouton "envoyer" est dans un autre <form> et le passage de variable n'est pas globale....
                2. oups doublons ..... :/
              3. <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='text' name='listeA' value='".$_POST['listeA']."'>
                </form>
                ";
                }
                ?>
                
                
                
                Sous Sous-Dossier :
                <?php
                if (isset($_POST['listeB'])){
                echo "
                </select>
                <input type='text' name='listeB' value='".$_POST['listeB']."'>
                </form>
                ";
                }
                ?>
                


                avec ce code j'arrive a sauvegarder la valeur de mon sous repertoire dans un champs (text ou caché) mais la liste deroulante change toujours de valeur... elle revien toujours la valeur initial.. quelqu'un pourrais m'aider svp ?
                1. dans le code que tu a donnée il y a ceci :

                  <input type='hidden' name='listeA' value='".$_POST['listeA']."'>

                  en faite sa relance la valeur de la listeA comme sa quand tu valide ton formulaire tu aura la valeur de listeA et listeB
                  1. oui mais j'ai pas compris le rapport avec le fait que sa me remet a chaque fois la première valeur dans la listbox 2 .. desolé je debute :s
                2. 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>
                  ";
                  } 
                  
                  


                  j'ai simplement enlever le 'submit' du onechange pour la listBox B ..... sa a l'air d'avoir un bon rendu... c'est propre ce que je voens de faire?

                  par contre j'ai de gros souci...je ne peu pas envoyer mon formulaire ..
                  C'est du a la structure cette fois ci :

                  <form>
                  *****Liste 1
                  </form>

                  <form>
                  *****Liste 2
                  </form>

                  <form>
                  ***** Bouton"Envoyer"
                  </form>
                  Sa ne marche pas :( .

                  j'ai essayé
                  <form>
                  *****Liste 1
                  *****Liste 2
                  ***** Bouton"Envoyer"
                  </form>

                  Mais la liste ne change pas cette fois ci ...
                  1. 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 !
                    1. 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
                      1. 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
                        • 1
                        • 2