Foros del Web » Programando para Internet » PHP »

Cambiar tamaño de imagenes de banner aleatorio

Estas en el tema de Cambiar tamaño de imagenes de banner aleatorio en el foro de PHP en Foros del Web. Hola Amigos: Tengo este código para banner aleatorios: function imagen_aleatoria($path) { $F = 0; $dir = opendir($path); while ($file = readdir($dir)) { if (($file != ...
  #1 (permalink)  
Antiguo 09/02/2009, 14:48
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Pregunta

Hola Amigos:

Tengo este código para banner aleatorios:

function imagen_aleatoria($path) {
$F = 0;
$dir = opendir($path);
while ($file = readdir($dir)) { if (($file != ".") || ($file != "..")) { $archivos[$F] = $file; $F++; } }

$muestra = rand(1,$F);

return "<img src=$path/$archivos[$muestra]>";
}

y después lo llamo donde quiero mostrarlo así:

echo imagen_aleatoria("./CARPETA DE LA IMAGEN");

Funciona perfectamente pero quisiera que al mostrar la imagen me la reduzca en ancho y alto. Cómo puedo hacer esto y donde lo coloco???

Otra cosa también quisiera que me mostrar el titulo del producto que está en la BD y que al darle click vaya a su ubicación en la página.

Gracias

Hola:

Ya resolví el problema de el tamaño de las imagenes, quedó así:

function imagen_aleatoria($path) {
$n = 0;
$dir = opendir($path);
while ($file = readdir($dir)) { if (($file != ".") || ($file != "..")) { $archivos[$n] = $file; $n++; } }

$archivo = rand(1,$n);

return "<img src=\"$path/$archivos[$archivo]\" height=\"115\" width=\"115\">";
}

y la llamo igual así:
echo imagen_aleatoria("./CARPETA DE LA IMAGEN");

Lo que les agradezco es que me ayuden a resolver lo del titulo del producto que está en la BD y que al darle click vaya a su ubicación en la página.

Por favor no me dejen sola....

Gracias

Última edición por GatorV; 10/02/2009 a las 09:33
  #2 (permalink)  
Antiguo 09/02/2009, 17:17
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Cuál es la estructura de la tabla en tu bd que usas para administrar los banners? Estoy viendo que usas el nombre de un archivo para mostrar el banner, por lo que este nombre de archivo es la única referencia que tienes para llegar al registro correspondiente de la bd.

  #3 (permalink)  
Antiguo 09/02/2009, 17:21
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

la ruta del archivo de la foto está en una tabla que se llama items y alli tengo un campo que se llama nombre_item que es el que quisiera mostrar para hacerle un enlace a donde está ese producto y no se como.

Gracias
  #4 (permalink)  
Antiguo 09/02/2009, 17:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Bueno, haz una consulta pidiendo el título de la fila cuyo nombre de archivo se llama $archivo:

Código php:
Ver original
  1. $sql = "SELECT * FROM items WHERE nombre_item = '$archivo'";
Ejecuta esa consulta usando mysql_query() y luego usando mysql_fetch_assoc() extraes los datos.

Lo mejor sería que busques un buen manual de php y mysql.

  #5 (permalink)  
Antiguo 09/02/2009, 17:31
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Si se usar mysql_query() y mysql_fetch_assoc(), me confundo es en donde situar las sentencias.

Gracias.
  #6 (permalink)  
Antiguo 09/02/2009, 17:42
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Trata y pon aquí lo que obtengas. Podremos ayudarte partiendo de eso.

Ya te puse en mi mensaje anterior la consulta que más o menos debes realizar. No entendí muy bien los campos que tienes en tu tabla items ni la función que cumplen en el proceso, así que revisa esa consulta y corrígela. Así debería funcionar como deseas.

  #7 (permalink)  
Antiguo 09/02/2009, 17:49
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

la cuestión es que la parte donde se muestra un producto está asociada con este campo sku que es el que guarda la ruta de la foto. Esto es lo que muestra en la barra de dirección:

//localhost:8080/phpmyadmin/store/mostrar_producto.php?sku=barbie-fairytopia-bs

entonces cuando yo hago el banner aleatorio debería darme un enlace allí.

Disculpa pero estoy bastante enredada, creo que tengo un poco perdida en mi cerebro la neurona de la organización pues se me hace dificil entender como hago para hacer el enlace hasta ese punto.

Si puedes explicarme un poco como a un principiante te lo agradezco.

Gracias.
  #8 (permalink)  
Antiguo 09/02/2009, 18:01
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

¿Todos los archivos en la carpeta $path tienen un registro asociado en la base de datos? Sería mucho más sencillo entonces que hagas primero una consulta a la bd y pidas un registro aleatorio. Una vez tienes todos los datos, muestras la imagen y lo demás:

Código php:
Ver original
  1. $sql = mysql_query("SELECT * FROM items ORDER BY RAND() LIMIT 1");
  2. $datos = mysql_fetch_assoc($sql);
$datos es ahora un array con todos los campos de uno de los registros de tu bd, escogidos aleatoriamente. Ahora, usando ese arreglo, puedes mostrar la imagen.

  #9 (permalink)  
Antiguo 09/02/2009, 18:02
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
esto es lo que pude hacer:

<?
//creamos una variable con la ubicacion de las imagenes
function imagen_aleatoria($path) {
$conexion = db_connect();
if (!$conexion)
return 0;
$consultar = mysql_query("SELECT categoria FROM items WHERE sku = '$archivo'");
while ($registro = mysql_fetch_array($consultar)) {
$categoria = $registro["categoria"];
}

$n = 0;
$dir = opendir($path);
while ($file = readdir($dir)) { if (($file != ".") || ($file != "..")) { $archivos[$n] = $file; $n++; } }

$archivo = rand(1,$n);

return "<img src=\"$path/$archivos[$archivo]\" height=\"115\" width=\"115\">";
}
?>

ahora como lo hago el enlace al banner para saber si me lleva al producto?

me disculpas nuevamente pero no se como usarlo en el código que tengo.

Última edición por GatorV; 10/02/2009 a las 09:21
  #10 (permalink)  
Antiguo 09/02/2009, 18:36
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Okey. Lo que hice con mi útlimo código fue invertir el proceso que ya tienes.

Con el código que has puesto buscas en un directorio todas las imágenes, y extraes una aleatoriamente, cierto? Luego, quieres buscar en la base de datos la información relacionada con esa imagen.

Lo que yo te propongo es hacerlo al revés. Extrae un registro aleatoriamente de la base de datos, en base al código que te di en mi mensaje anterior (olvídate del codigo que has puesto). Si ves ahí, en $datos guardo toda la información extraida con esa consulta, y que corresponde a la información de un registro que el servidor MySQL ha escogido aleatoriamente.

En la tabla items imagino que tienes un campo llamado nombre_de_la_imagen, no? Además tienes otro con el nombre, que creo es sku?. Ya teniendo todo eso basta un simple echo para imprimir el link y la imagen

Código php:
Ver original
  1. echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"path_de_las_imagenes/$datos[nombre_de_la_imagen]\" height=\"115\" width=\"115\"></a>";

El código que has puesto antes para buscar las imágenes y escoger una ya no es necesario, pues MySQL ya te devolvió un registro aleatorio.

Un saludo,
  #11 (permalink)  
Antiguo 09/02/2009, 18:55
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
gracias funciona muy bien al hacer el enlace, pero no me muestra las imagenes. No se si lo que pasa es que en la tabla solo está guardada la ruta y las imagenes están en una carpeta???

ya está listo okram era una ruta en el código. Mil gracias por tu ayuda y tu paciencia.

Última edición por GatorV; 10/02/2009 a las 09:21
  #12 (permalink)  
Antiguo 09/02/2009, 19:07
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Bueno, debes tener un campo que relacione cada registro con su imagen. Usa ese campo para contruir la url de la imagen a mostrar.

  #13 (permalink)  
Antiguo 09/02/2009, 19:09
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
otra vez yo... tengo otro problema como son varios banners en el home, al colocar el código:

echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"path_de_las_imagenes/$datos[nombre_de_la_imagen]\" height=\"115\" width=\"115\"></a>";

me muestra las mismas imagenes en todos los banners, cómo hago para que las muestre diferente???

tengo que hacer el mismo procedimiento para cada banner??

Última edición por GatorV; 10/02/2009 a las 09:33
  #14 (permalink)  
Antiguo 09/02/2009, 22:02
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Podrías modificar la consulta SQL. LIMIT 1 significa que sólo devolverá un resultado. Cámbialo según lo que necesites. Para mostrar los banners, antes cada echo que imprime la imagen con el enlace debes pedir el elemento usando mysql_fetch_assoc() nuevamente. Esto hará que el puntero interno del array avance una posición y te muestre el siguiente resultado.

  #15 (permalink)  
Antiguo 10/02/2009, 07:14
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

no se como hacerlo. si yo tengo el código así:

<?
include ('db.php');
$conexion = db_connect();
if (!$conexion)
return 0;
$sql = mysql_query("SELECT * FROM items ORDER BY RAND() LIMIT 1");
$datos = mysql_fetch_assoc($sql);
$title = $registro["nombr_tienda"];
$sku = $registro["sku"];
?>

y en el home hago un include para llamar esto y colocar el echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"path_de_las_imagenes/$datos[nombre_de_la_imagen]\" height=\"115\" width=\"115\"></a>";

cómo hago lo que me indicas "Para mostrar los banners, antes cada echo que imprime la imagen con el enlace debes pedir el elemento usando mysql_fetch_assoc() nuevamente"

No sé cómo, si pueden explicarme por favor. Gracias.
  #16 (permalink)  
Antiguo 10/02/2009, 08:08
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Código php:
Ver original
  1. $datos = mysql_fetch_assoc($sql);
Te recomiendo leer el manual de PHP para la función mysql_fetch_assoc(). Debes colocar esa línea cada que quieras avanzar una fila en los resultados que pediste en tu consulta.

  #17 (permalink)  
Antiguo 10/02/2009, 08:53
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

hola okram. lei que la función mysql_fetch_assoc() devuelve una matriz asociativa que corresponde a la fila recuperada y mueve el apuntador de datos interno hacia adelante.

Pero como te dije antes, muchas veces se para que sirven las cosas pero no se como ponerlas. Esto fue lo que hice:

while ($datos = mysql_fetch_assoc($sql)) {
$datos["nombr_tienda"];
$datos["sku"];
}

pero eso no me da nada. De verdad si pido ayuda es porque no entiendo y antes de pedir ayuda leo mil veces para ver si lo puedo resolver.

Como voy a hacer algo que no se.

Disculpame pero me cuesta...
  #18 (permalink)  
Antiguo 10/02/2009, 09:15
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

No es necesario crear un ciclo, pues no quieres mostrar todos los datos de golpe ni procesarlo de una vez. mysql_fetch_assoc() no necesariamente tiene que estar dentro de un while. Puedes emplearlo aisladamente y así ir tomando los datos uno por uno cuando los necesites.

Código php:
Ver original
  1. $datos = mysql_fetch_assoc($tu_recurso); // Tomas la primera fila
  2. echo $datos['un_campo'];
  3. echo $datos['otro_campo'];
  4.  
  5. // Otros procesos
  6.  
  7. $datos = mysql_fetch_assoc($tu_recurso); // Tomas la siguiente fila
  8. echo $datos['un_campo'];
  9. echo $datos['otro_campo'];
  10.  
  11. // Otros procesos más
  12.  
  13. $datos = mysql_fetch_assoc($tu_recurso); // Tomas la siguiente fila, que sería la tercera
  14. echo $datos['un_campo'];
  15. echo $datos['otro_campo'];
Como ves, cada que quiero sacar un nuevo resultado lo que hago es llamar nuevamente a la función. En tu caso, cada vez que quieres imprimir un banner, debes llamar a la función nuevamente, como en el ejemplo, para que así obtengas un nuevo resultado. Como te dije antes, en la claúsula LIMIT de la consulta defines cuantos resultados estarán disponibles.

Si tu llamas mysql_fetch_assoc() más veces que el número de filas que has pedido, esta función simplemente devolverá false. Si pides 3 filas, p.ej, sólo podrás imprimir 3 banners.

  #19 (permalink)  
Antiguo 10/02/2009, 09:34
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

pero de esta manera me sigue dando la misma imagen para todos los banner. lo puse así:

<?
include ('xxxx.php');
$conexion = db_connect();
if (!$conexion)
return 0;
$sql = mysql_query("SELECT * FROM items ORDER BY RAND() LIMIT 3");
$datos = mysql_fetch_assoc($sql);
$title = $registro["nombr_tienda"];
$sku = $registro["sku"];

$datos = mysql_fetch_assoc($sql);
$title = $registro["nombr_tienda"];
$sku = $registro["sku"];

$datos = mysql_fetch_assoc($sql);
$title = $registro["nombr_tienda"];
$sku = $registro["sku"];
?>

y luego lo llamo en distintas partes en home.php así:

echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"images/$datos[sku]\" height=\"115\" width=\"115\"></a>";

echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"images/$datos[sku]\" height=\"115\" width=\"115\"></a>";

echo "<a href=\"mostrar_producto.php?sku=$datos[sku]\"><img src=\"images/$datos[sku]\" height=\"115\" width=\"115\"></a>";

por qué no muestra distintas imagenes y me muestra la misma para los tres?
  #20 (permalink)  
Antiguo 10/02/2009, 09:37
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

Sigue el patrón que te puse en el mensaje anterior. Así como lo estás poniendo, al inicio ya estás extrayendo las 3 filas y estás reemplazando el valor de $title y $sku una y otra vez. Debes llamar a la función antes de usar los datos. Llamas y usas, luego vuelves a llamar y los vuelves a usar (imprimir)... Siguiendo esa secuencia.

  #21 (permalink)  
Antiguo 10/02/2009, 09:51
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Cambiar tamaño de imagenes de banner aleatorio

nuevamente muchas gracias okram, lo que hice fue poner el echo en la función y después llamarla en la otra página con include. Thank you.
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 21:40.