Foros del Web » Programando para Internet » PHP »

Solo imágenes

Estas en el tema de Solo imágenes en el foro de PHP en Foros del Web. Hola gente, miren tengo el siguiente problema a ver si me pueden ayudar Tengo en una carpeta varias imágenes, pero a su vez tengo un ...
  #1 (permalink)  
Antiguo 28/08/2007, 20:25
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Exclamación Solo imágenes

Hola gente, miren tengo el siguiente problema a ver si me pueden ayudar

Tengo en una carpeta varias imágenes, pero a su vez tengo un archivo PHP. Además tengo un sistema de noticias, el cual ademas de pedir el titulo, noticia, etc. a través de un select muestra los nombres de las imagenes. Entonces ese nombre se agrega en una base de datos (con el titulo, la noticia, etc). Entonces al mostrar la noticia hago lo siguiente: <img src=$imagen border=0>

Esto está todo excelente, pero mi problema es que el select donde muestran los nombres de las imagenes muestra tmb el archivo PHP y es lo que no quiero. Como puedo hacer para que solo me muestre los archivos JPG??¿?¿?¿?¿

Acá les dejo el código que muestra los nombres de los archivos de un directorio a través de un select:
Código PHP:
$directorio opendir("img/");
while (
$imagen readdir($directorio)) {
    if (
$imagen == '.' || $imagen == '..') continue;
    echo 
'<option value="' $imagen '">' $imagen '</option>';
}
closedir($directorio); 
Desde ya agradezco cualquier opinión y/o ayuda.
  #2 (permalink)  
Antiguo 28/08/2007, 23:30
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: Solo imágenes

yo lo haría así:

Código PHP:
$directorio opendir("img/");

    while (
$imagen readdir($directorio))
    {
        if (
$imagen == '.' || $imagen == '..' || strpos($imagen'.php') !== false)
        {
            continue;
        }
        echo 
'<option value="' $imagen '">' $imagen '</option>';
    }
    
closedir($directorio); 
pd: strpos busca la cadena '.php', si es distinto de false (quiere decir que la encontró) entonces hace un continue ;)

pd2: evitaría usar el continue... te recomendaría hacerlo al revez al if
  #3 (permalink)  
Antiguo 29/08/2007, 09:12
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Solo imágenes

Cita:
evitaría usar el continue... te recomendaría hacerlo al revez al if
Podrás explicarnos por que? No por cuestionarte, sino para aprender, seguramente tengas fundamentos, y como es algo que siempre uso quisiera saber si realmente es malo su uso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 29/08/2007, 09:57
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: Solo imágenes

mirá, según dicen los que saben, todo lo que sean instrucciones goto, break o continue:

1. generan confuciones
2. pude ser resuelto de una manera más entendible, óptima y elegante.

pensemos: para qué vas a evaluar una condición que hace nada?
puede parecer más simple pero, digamos, no es "ético".

retomemos el ejemplo:

Código PHP:
<?
while ($imagen readdir($directorio))
{
    if (
$imagen != '.' && $imagen != '..' && strpos($imagen'.php') === false)
    {
        echo 
'<option value="' $imagen '">' $imagen '</option>';
    }    
}
?>
En este caso si la pregunta responde afirmativamente hago el trabajo deseado.

En el código original de geskin, en el caso de respuesta afirmativa omito lo que haya en el loop, y en el caso negativo (implícito) hago el trabajo deseado.

Es decir, mi código es más optimo y entendible ya que por defecto, terminada la ejecución del if, se va a pasar a la siguiente iteración. Uso el caso afirmativo del If y nada más.

Con el continue se hizo un poco más engorroso (quizás no en esta aplicación, pero en otros casos donde anidemos ifs la cosa puede empeorar usando el continue)

Lo mismo pasa con el break salvo cuando lo usemos en la escructura switch (donde es imperativo su uso).

y repito, esto dicen los que saben. y yo lo comparto tmb
  #5 (permalink)  
Antiguo 29/08/2007, 10:17
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Solo imágenes

Comprendo, comparto que para el ejemplo aplica perfectamente (antes tampoco lo dude, pero comprendí que tratabas de decir que la instrucción era contraproducente en cualquier ámbito), pero sigo creyendo que hay casos en los que es óptimo usarlos, no el goto por no ser propio del php, pero imagina estas dos situaciones:

break: Tengo que encontrar x valor en 10000 posiciones una única vez (en un sorteo puede que aplique), para este caso el break me parece que es lo único que es efectivo. Puede que tenga que iterar las 10000 posiciones, pero también puede que itere 1, 10, o 20 veces nomas, pero siempre será mejor que iterar sobre todo.

continue: Imaginemos que debe en la iteración hacer muuuuchas comparaciones o lo que fuera.
Si bien habría que ver el caso, hacer un continue al inicio es mas óptimo (el cual sale del ciclo actual pasando al siguiente) que evaluar las siguientes "muuuuchas" comparaciones.


Repito, apruebo lo que decís en base al ejemplo, no estoy de acuerdo en base a tu fundamento que es malo usar continue ;), a no ser obvio que me este saltando algo, no soy la palabra!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 29/08/2007, 10:39
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: Solo imágenes

Esto me gusta :)

lástima que no estoy muy iluminado ahora... pero si tenés un ejemplo concreto dámelo y te lo resuelvo ;)

mirá, para el caso del break que proponés es más simple la estructura esta:

Código PHP:
<?
do
{
// Algo
}
while (
condicion);
?>
Es decir, cuando la condición se hace falsa... se finaliza el bucle. no lo "rompés" con un break... se entiende?

lo que estos señores proponen de fondo, o se deja entrever, es algo así como "no uses una estructura que debas romper o violar para solucionar un problema"

y esto lo veo sensacional

Con el tema del continue, te puedo asegurar que hay mejores formas de resolverlo sin él ;)

pero bueno, comodo todo... están los que comparten y los que no...
y como se ve, yo comparto (con ese pensamiento y el poco conocimiento que tengo :P jaja) espero que a algien le sirva ;)
  #7 (permalink)  
Antiguo 29/08/2007, 12:38
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Solo imágenes

Desde ya gracias nachopro, ahora mismo cuando termine de escribir esta respuesta me lo pongo a probar.

En mi sistema de noticias, uso el switch, donde un archivo "proc.php" tiene todos los datos para procesar la info y guardarla en la base de datos.

Les dejo un ejemplo concreto de lo que tengo hecho en proc.php (una parte):
Código PHP:
switch($que){
case 
'ingresar':
$titulo quitar($_POST[titulo]);
$noticia quitar($_POST[noticia]);
$fecha quitar($_POST[fecha]);
$imagen quitar($_POST[imagen]);

if(!
$titulo || !$noticia || !$fecha || !$imagen){
echo
"Faltó completar un campo obligatorio <br>
<a href=\"admin_escribir.php\">Volver atras</a>"
;
} else {

$sql "INSERT INTO mi_tabla(titulo, noticia, fecha, imagen, activo) values('$titulo', '$noticia', '$fecha', '$imagen', '1')";
$res mysql_query($sql) or die("Error: ".mysql_error());

echo
"Noticia Ingresada con éxito <br>
<a href=\"admin_menu.php\">Volver al index</a>"
;
}
break; 
Esa es una parte que utilizo para ingresar las noticias, para mi mees muy simple jejej :)
  #8 (permalink)  
Antiguo 29/08/2007, 13:13
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Solo imágenes

Si, este tipo de intercambios me encantan también!!! :)

Bueno, siguiendo con mi fuerte (por ahora :P) fanatismo hacia continue y break (mentira, no es fanatismo, sino que creo que hay casos que es mejor usarlos y no esta mal) vamos a aclarar que es verdad que antiguamente estaba mal visto el uso de goto, y que éstas funciones son sacadas de éste.

Ahora bien, php este de mi lado, porque por ejemplo aprueba el uso de exepciones, lo cual es de lo mismo.

Así que reiterandome yo creo que el uso de excepciones facilita enormente el control de errores en el desarrollo de software y su mantenimiento posterior, lo mismo me pasa con continue y break.

Estaría bueno que den opiniones, o sea, tu postura esta perfecta (yo muy rara vez usaré un do while), y la mia (según yo:P) también.

Dejo un ejemplo de continue (copiado de php.net):
Código PHP:
 while ($i++ < 5) {
    echo 
"Outer<br>\n";
    while (
1) {
        echo 
"&nbsp;&nbsp;Middle<br>\n";
        while (
1) {
            echo 
"&nbsp;&nbsp;Inner<br>\n";
            continue 
3;
        }
        echo 
"Esto nunca se imprime.<br>\n";
    }
    echo 
"Y esto tampoco.<br>\n";

__________________
Mi punto de partida es Que Bueno Lo Nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:17.