menu select che visualizza le cartelle di una cartella

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, volevo sapere come faccio popolare un menu select che mi visualizza solo le cartelle dentro alla cartella public/photo/??

grazie mille e buona notte.
 
Salve, volevo sapere come faccio popolare un menu select che mi visualizza solo le cartelle dentro alla cartella public/photo/??

grazie mille e buona notte.
Intendi solamente i nomi delle cartelle?

es.
PHP:
function prendi_directory_sotto($dir){
    $return = array();
    foreach(glob($dir.'*',GLOB_ONLYDIR) as $dir) array_push($return,basename($dir));
    return $return;
}

echo "<select name=dirs>";
foreach(prendi_directory_sotto('public/photo/') as $dir) echo "<option name=$dir>$dir</option>";
echo "</select>";
 
si intendo solo le cartelle...

ora come faccio fare la modifica e fare che si autoseleziona il menu.

il campo mio del database è _dir

come devo fare?

grazie mille e buona giornata
 
si intendo solo le cartelle...

ora come faccio fare la modifica e fare che si autoseleziona il menu.

il campo mio del database è _dir

come devo fare?

grazie mille e buona giornata
Fai un select al database e controlli il campo nel foreach se corrisponde con la directory

PHP:
//$result è il fetch di una query eseguita prima
foreach(prendi_directory_sotto('public/photo/') as $dir) echo "<option name=$dir ".($result['dir']==$dir?"selected":"").">$dir</option>";
 
ciao ho fatto cosi.. ma mi ripete le cartelle due volte.
ecco il codice:
PHP:
<?php echo "<select name=\"dir_select\">";?>
        <option>Seleziona</option>
        <?php
	$result = $db->query("SELECT * FROM photo_categorie");
	$_dir = !empty($_POST['dir_select']) ? $_POST['dir_select'] : $dir; 
	while($row = $result->fetch_array())
	{
	$_dir= $row['_dir'];
	$dir = $row['_dir'];
	  if($_dir==$dir)
				{
				foreach(prendi_directory_sotto('../public/media/photo/') as $dir)
				{
				 echo "<option value=\"".$dir."\" selected='selected'>".$_dir."</option>";
				}
				}
				else
				 {
					 echo "<option value='".$id."'>".$_dir."</option>";
				}
		
			
	}
	 
?>
      </select>

e un po incasinato ma quando funziona lo faccio a modo.
idee?
 
Scusami, ma che senso ha questa parte? Sarà sempre vera
PHP:
    $_dir= $row['_dir']; 
    $dir = $row['_dir']; 
      if($_dir==$dir)

Inoltre ti serve confrontare la directory da query o da una variabile post inviata? E togli il while anche


te l'ho un po riformulato
PHP:
    $result = $db->query("SELECT * FROM photo_categorie")->fetch_array(); 
    $directory_database = $result['_dir'];
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir) 
                { 
                     if($directory_database==$dir) 
                         echo "<option value=\"".$dir."\" selected='selected'>".$dir."</option>"; 
                      else 
                          echo "<option value='".$dir."'>".$dir."</option>"; 
                }

E dove sarebbe $id?
 
Ultima modifica:
ciao, l'id non serve perché ho fatto copia/incolla di un altro codice.

ora ti posto la modifica:
perché mi seleziona la directory sbagliata?
PHP:
<?php echo "<select name=\"dir\">";?>
        <option>Seleziona</option>
        <?php
	$directory_database = !empty($_POST['dir']) ? $_POST['dir'] : $dir; 
	$result = $db->query("SELECT * FROM photo_categorie")->fetch_array(); 
    $directory_database = $result['_dir'];
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir) 
                { 
                     if($directory_database==$dir) 
                         echo "<option value=\"".$dir."\" selected='selected'>".$dir."</option>"; 
                      else 
                          echo "<option value=\"".$dir."\">".$dir."</option>"; 
                }  
	 
?>
      </select>

ad esempio seleziona pirografia invece lui fa cosi:
output html:

PHP:
<tr>
	<td width="14%">Directory</td>
	<td width="86%">
	<select name="dir">        <option>Seleziona</option>
        <option value="pirografia">pirografia</option><option value="scaglie-di-marmo" selected='selected'>scaglie-di-marmo</option>      </select>
</tr>

invece deve selezionare la pirografia perché ho selezionato la categoria pirografia.

non so come mai.

ti ringrazio moltissimo .

buona serata.
 
Ah ma allora non centra il database, ti basta fare cosi

PHP:
    $directory = !empty($_POST['dir']) ? $_POST['dir'] : "directory_default";  //qui metti la directory di base che dovrebbe essere selezionata
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir)  
                {  
                     if($directory==$dir)  
                         echo "<option value=\"".$dir."\" selected='selected'>".$dir."</option>";  
                      else  
                          echo "<option value=\"".$dir."\">".$dir."</option>";  
                }

Ulteriore correzione(alla funzione che avevo fatto), sostituisci in prendi_directory_sotto
PHP:
array_push($return,basename($dir));

con
PHP:
$return[] = basename($dir);
perché è un po più veloce se non si deve aggiungere valori multipli
 
Ultima modifica:
invece si .. perché devo recuperare anche la cartella che è inserito nel campo _dir,
e visualizzarla nel menu select.
e poi l'utente potrebbe cambiarla e cosi via.

ma mi sono accorto che seleziona sempre l'ultima ovvero sempre "scaglie-di-marmo".

o provato ad fare un'altra cartella "prova" e lui mi seleziona sempre scaglie-di-marmo.

come mai?

grazie mille.
 
invece si .. perché devo recuperare anche la cartella che è inserito nel campo _dir,
e visualizzarla nel menu select.
e poi l'utente potrebbe cambiarla e cosi via.

ma mi sono accorto che seleziona sempre l'ultima ovvero sempre "scaglie-di-marmo".

o provato ad fare un'altra cartella "prova" e lui mi seleziona sempre scaglie-di-marmo.

come mai?

grazie mille.
Per caso quella cartella l'hai messa come predefinita? Comunque allora come dev'essere la comparazione?

-Se la variabile post corrisponde ad una delle directory ciclate questa viene selezionata?
-Se il risultato di una query ha il campo _dir corrispondente con una delle directory ciclate questa viene selezionata?
-Se.... ?
 
-Se il risultato di una query ha il campo _dir corrispondente con una delle directory ciclate questa viene selezionata?
questa.
ma non so come mai non vada.

come si può fare?

grazie mille.
 
-Se il risultato di una query ha il campo _dir corrispondente con una delle directory ciclate questa viene selezionata?
questa.
ma non so come mai non vada.

come si può fare?

grazie mille.
Allora a cosa ti serve l'altra variabile post? Questa era quella di prima cioè
PHP:
    $result = $db->query("SELECT * FROM photo_categorie")->fetch_array(); 
    $directory_database = $result['_dir'];
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir) 
                { 
                     if($directory_database==$dir) 
                         echo "<option value=\"".$dir."\" selected='selected'>".$dir."</option>"; 
                      else 
                          echo "<option value='".$dir."'>".$dir."</option>"; 
                }

Per caso volevi controllare la sua esistenza nel database con la variabile post?
 
Allora a cosa ti serve l'altra variabile post? Questa era quella di prima cioè
PHP:
    $result = $db->query("SELECT * FROM photo_categorie")->fetch_array(); 
    $directory_database = $result['_dir'];
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir) 
                { 
                     if($directory_database==$dir) 
                         echo "<option value=\"".$dir."\" selected='selected'>".$dir."</option>"; 
                      else 
                          echo "<option value='".$dir."'>".$dir."</option>"; 
                }

Per caso volevi controllare la sua esistenza nel database con la variabile post?

ciao,la variabile post mi serviva per rimanere in memoria il menu selezionato se l'utente deve ancora scrivere gli altri dati e per sabglio da invio.
ora provo questo codice.

ciao e buona serata.
 
ciao,la variabile post mi serviva per rimanere in memoria il menu selezionato se l'utente deve ancora scrivere gli altri dati e per sabglio da invio.
ora provo questo codice.

ciao e buona serata.

Ah ora ho capito, allora cosi dovrebbe andare

PHP:
$dir_post = !empty($_POST['dir']) ? $_POST['dir'] : null;
$result = $db->query("SELECT * FROM photo_categorie")->fetch_array();  
    $dir_database = $result['_dir']; 
                foreach(prendi_directory_sotto('../public/media/photo/') as $dir)  
                {  
                     if($dir_post==$dir)
                             echo "<option value=\"$dir\" selected='selected'>$dir</option>"; 
                     elseif($dir_database==$dir && $dir_post==null)  
                         echo "<option value=\"$dir\" selected='selected'>$dir</option>";  
                      else  
                          echo "<option value=\"$dir\">$dir</option>";  
                }
 
ok risolto problema questo va ad dovere:
PHP:
<tr>
	<td width="14%">Directory</td>
	<td width="86%">
	<?php echo "<select name=\"dir\">";?>
    <option>Seleziona</option>
<?php

	$result = $db->query("SELECT * FROM photo_categorie");
	$dir = !empty($_POST['dir']) ? $_POST['dir'] : $dir; 
	$row = $result->fetch_array();
	$db_dir = $row["_dir"];
	foreach(prendi_directory_sotto('../public/media/photo/') as $db_dir)
    {
            
	 if($db_dir==$dir)
                {
                 echo "<option value=\"".$db_dir."\" selected='selected'>".$db_dir."</option>\n";
                }
                else
                 {
                     echo "<option value='".$db_dir."'>".$db_dir."</option>\n";
                }
			
	}
?>
    </select>
</tr>

non so come funziona ma funziona vedendo l'output dell'html e le modfiiche nel db fa quello che volevo faccesse.

ti ringrazio molto.
 
ok risolto problema questo va ad dovere:
PHP:
<tr>
	<td width="14%">Directory</td>
	<td width="86%">
	<?php echo "<select name=\"dir\">";?>
    <option>Seleziona</option>
<?php

	$result = $db->query("SELECT * FROM photo_categorie");
	$dir = !empty($_POST['dir']) ? $_POST['dir'] : $dir; 
	$row = $result->fetch_array();
	$db_dir = $row["_dir"];
	foreach(prendi_directory_sotto('../public/media/photo/') as $db_dir)
    {
            
	 if($db_dir==$dir)
                {
                 echo "<option value=\"".$db_dir."\" selected='selected'>".$db_dir."</option>\n";
                }
                else
                 {
                     echo "<option value='".$db_dir."'>".$db_dir."</option>\n";
                }
			
	}
?>
    </select>
</tr>

non so come funziona ma funziona vedendo l'output dell'html e le modfiiche nel db fa quello che volevo faccesse.

ti ringrazio molto.
Quindi in pratica la query non ti serviva :), perché qui il risultato viene subito sovrascritto dall'elemento dell'array
PHP:
	$db_dir = $row["_dir"];
	foreach(prendi_directory_sotto('../public/media/photo/') as $db_dir)
    {
 
infatti non serviva.. perché doveva ciclare le cartelle nella cartella public/media/photo.
e nel menu a tendina selezionare quella che è stata inserita nel database e mettere selected alla cartella denrto public/media/photo.

però funziona lo stesso perché lo testata.

ti ringrazio molto. e buona giornata.
 

Discussioni simili