PHP:¿Cómo puedo generar menús desplegables(option)de forma fácil y cómoda?

De Foros del Web

Estas funciones son la solución!

Generando desde MySQL: a esta función se le pasa una consulta SQL que traiga el ID y el String de los items guardados en la base. El segundo parámetro es opcional, el cual recibe un ID y si es igual a alguno de los que trae la consulta, imprime la propiedad 'selected' del tag <option>

Código PHP:

<? 
function listar_items($sql, $marcar = 0) { 
    if ($marcar > 0) { 
        $result = mysql_query($sql); 
        while ($row = mysql_fetch_row($result)) { 
            ?> 
            <option value="<? echo $row[0]; ?>"<? if ($row[0] == $marcar) { echo ' selected'; } ?>><? echo $row[1]; ?></option> 
            <? 
        } 
    } 
    else { 
        $result = mysql_query($sql); 
        while ($row = mysql_fetch_row($result)) { 
            ?> 
            <option value="<? echo $row[0]; ?>"><? echo $row[1]; ?></option> 
            <? 
        } 
    } 
} 
?> 

Generando desde Directorio: a esta función se le pasa una ruta en donde haya archivos a listar. El segundo parámetro es opcional, el cual recibe un nombre de archivo y si es igual a alguno de los que está en el directorio, imprime la propiedad 'selected' del tag. Como yapa, los archivos son listados por orden natural <option>[/i]

Código PHP:

<? 
function listar_archivos($ruta, $marcar = x) { 
    if (is_dir($ruta)) { 
        if ($gd = opendir($ruta)) { 
            while (($archivo = readdir($gd)) !== false) { 
                if ($archivo != '.' && $archivo != '..') { 
                    $archivos[] = $archivo; 
                } 
            } 
            closedir($gd);             
            if (natcasesort($archivos)) { 
                if ($marcar != 'x') { 
                    foreach ($archivos as $archivo) { 
                        if ($archivo == $marcar) { 
                            echo '<option value="'.$archivo.'" selected>'.$archivo.'</option>'; 
                        } 
                        else { 
                            echo '<option value="'.$archivo.'">'.$archivo.'</option>'; 
                        } 
                    } 
                } 
                else { 
                    foreach ($archivos as $archivo) { 
                        echo '<option value="'.$archivo.'">'.$archivo.'</option>'; 
                    } 
                } 
            } 
        } 
    } 
} 
?> 

Ejemplos:

Código PHP:

bla bla bla 
<select name="usuario"> 
<? listar_items('select idusuario, usuario from usuarios', 1); ?> 
</select> 
bla bla bla 
<select name="foto"> 
<? listar_archivos('archivos/fotos/', 'sin_imagen.png'); ?> 
</select> 
bla bla bla 

--nachopro 09 Jun 2006

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales