PHP-MySQL: Insertar y Mostrar Fotos
jakkihm
Mensajes publicados
141
Estado
Miembro
-
Ruskov75% -
Ruskov75% -
Hola,
Estoy diseñando un sitio para una tienda con una base de datos y necesito permitir al visitante ver la foto de los objetos con su descripción (no quiero indicar la ruta, ya que es necesario que el visitante pueda ver directamente las fotos sin tener que hacer clic en un enlace).
Aquí está la estructura de mi tabla:
He insertado la información para todos los campos a través de un archivo ".txt" (por ahora estoy trabajando en local):
Para la visualización, he diseñado la siguiente tabla:
Todo funciona muy bien SALVO en lo que respecta a las fotos.
¿Cómo puedo insertarlas y luego mostrarlas en mi tabla?
¿Es posible copiarlas en el directorio de la base de datos y luego hacer referencia a ellas? ¿Pero cómo proceder?
¡Muchas gracias por tu ayuda!
Estoy diseñando un sitio para una tienda con una base de datos y necesito permitir al visitante ver la foto de los objetos con su descripción (no quiero indicar la ruta, ya que es necesario que el visitante pueda ver directamente las fotos sin tener que hacer clic en un enlace).
Aquí está la estructura de mi tabla:
CREATE TABLE objects ( id INT NOT NULL AUTO_INCREMENT, category VARCHAR (50) NOT NULL, photo BLOB NOT NULL, name VARCHAR (100) NOT NULL, description VARCHAR (200) NOT NULL, country VARCHAR (50) NOT NULL, PRIMARY KEY (id) );
He insertado la información para todos los campos a través de un archivo ".txt" (por ahora estoy trabajando en local):
;furniture;c:\Program Files\EasyPHP1-8\mysql\data\gallery\pict.jpg; etc...
Para la visualización, he diseñado la siguiente tabla:
<form action="furniture.php" method="POST"> <table cellspacing=0" cellpadding="0" border="1"> <?php if($result) { while($data = mysql_fetch_assoc($result)) { printf ( "<tr> <td> ¿debe mostrar foto? </td> <td>%s</td> <td>%s</td> <td>%s</td> </tr>", $data["photo"], $data["name"], $data["description"], $data["country"] ); } // end while if(mysql_num_rows($result) == 0) { $msg.="No hay información disponible"; } } ?> </table> </form> Todo funciona muy bien SALVO en lo que respecta a las fotos.
¿Cómo puedo insertarlas y luego mostrarlas en mi tabla?
¿Es posible copiarlas en el directorio de la base de datos y luego hacer referencia a ellas? ¿Pero cómo proceder?
¡Muchas gracias por tu ayuda!
Configuración: Windows XP Firefox 2.0.0.1
11 respuestas
-
Sería bueno que compartieran sus resultados con nosotros. Para poder resolver nuestros problemas también.
-
Hola,
Para mantener la estructura de tu tabla, debes proceder de la siguiente manera:
- crea un nuevo archivo image.php, que contenga:<?php $id = $_GET['id']; // Coloca aquí tus parámetros de conexión a la base de datos // Recuperamos la imagen $sql = "SELECT photo FROM objects WHERE id='".$id."'"; $result = mysql_query($sql); // Establecemos las cabeceras, para indicar que tenemos una foto. header('Content-type: image/jpeg'); // cf (1) header('Content-transfer-encoding: binary'); // Y enviamos la imagen echo $result["photo"]; ?>(1) : esto funcionará para una imagen jpeg. Si tienes varios tipos de imágenes, te recomiendo que guardes el tipo MIME en la base de datos, añadiendo una columna "type" a tu tabla.
- luego, en tu página principal, coloca<form action="furniture.php" method="POST"> <table cellspacing=0" cellpadding="0" border="1"> <?php if($result) { while($data = mysql_fetch_assoc($result)) { printf ( "<tr> <td><img src='image.php?id=%s' /></td> <td>%s</td> <td>%s</td> <td>%s</td> </tr>", $data["id"], $data["name"], $data["description"], $data["country"] ); } // fin while if(mysql_num_rows($result) == 0) { $msg.="No hay información disponible"; } } ?> </table> </form>Bueno, ahí tienes, no tengo con qué probarlo, espero que esté bien ^^
Xavier-
Lo siento, pero esto muestra el nombre del archivo que se encuentra en la base de datos pero no la foto.
Tuve este problema la semana pasada y encontré una solución mucho más simple:
colocar el lugar de visualización de la foto en html (en un marco para mí)
luego mostrar la foto así
<?php
print '<img src="'.$lien.'" alt="" width="100" height="100"/><br />';
?>
( o $lien contiene el directorio donde se encuentra la foto y el nombre de la foto que puede encontrarse en una variable contenida en una BDD.)
respetar rigurosamente la sintaxis, por supuesto.
Esto funciona perfectamente, lo he probado.
Buena suerte
NORT
-
-
Hola,
La mejor manera, según yo, sería poner todas tus fotos en una carpeta, tipo "imágenes" o "fotos", en la misma carpeta que tu archivo, para no dificultar las cosas....
Luego, para la visualización, pones un campo en tu bdd tipo "ruta", en relativo, ej: "fotos/imagen1.jpg"
Finalmente, insertas la foto así: <img src="$data["ruta"]"...
P.D.: Yo utilizo mysql_fetch_array, que coloca los campos en un arreglo... así que verifica para mysql_fetch_assoc...
--
¡Vamos, ciao!!! -
-
Hola,
¿Qué contiene tu base de datos? ¿Contiene solamente la dirección de la foto?
En el caso del mensaje que publiqué, la base de datos no contenía la dirección, sino la foto en sí codificada en binario. Entonces echo $result["photo"] devuelve bien la imagen. Sin embargo, si como creo, la base de datos contiene solamente la dirección de la foto, esa misma línea devolverá... ¡la dirección de la imagen sola!
Xavier -
En realidad, mi problema es cargar la imagen seleccionada al navegar en una página web. Agradecería su ayuda para realizar esta tarea.
-
Xavier,
He hecho los cambios siguiendo tus recomendaciones, pero cuando ejecuto mi archivo principal, la tabla se muestra sin fotos (de hecho, aparece un pequeño ícono como si la imagen en cuestión no se encontrara).
Si ejecuto el archivo "image.php", recibo los siguientes mensajes de error:
Notice: Undefined index: id in c:\program files\easyphp1-8\www\test.php on line 3 Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test.php:3) in c:\program files\easyphp1-8\www\test.php on line 19
¿A qué puede deberse esto?
Gracias. -
Hola,
Para el mensaje de error cuando lanzas el archivo image.php, es porque lo llamas sin poner ?id=idImage detrás.
Intenta llamarlo así, con un id de imagen que tengas, y dime qué tal te va.
Xavier -
Para reanudar la discusión, yo no tengo ningún mensaje de error, y lo único que aparece es la URL de la dirección cuando voy a
http://localhost/image.php?id=3 -
el campo que estoy apuntando es efectivamente de tipo blob y contiene los datos binarios. (de hecho, al principio añadí "directamente" a través de phpMyAdmin).
...
Bueno, acabo de modificar algunas líneas que según yo no deberían tener ninguna incidencia, ¡pero el resultado es que funciona! :)
También tenía otro problema con la carga, pero ya lo he resuelto.
Gracias por la respuesta, y disculpa la molestia :) -