PHP-MySQL: Insertar y Mostrar Fotos

jakkihm Mensajes publicados 141 Estado Miembro -  
 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:
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

  1. yoshiro Mensajes publicados 532 Estado Miembro 65
     
    Sería bueno que compartieran sus resultados con nosotros. Para poder resolver nuestros problemas también.
    29
    1. Alain
       

      ¿Cómo insertar los países del mundo en una página web? Así que en una lista desplegable?

      0
  2. Reivax962 Mensajes publicados 3742 Estado Miembro 1 011
     
    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
    13
    1. NORT
       
      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
      0
  3. atomy Mensajes publicados 460 Fecha de registro   Estado Miembro 92
     
    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!!!
    6
    1. Ruskov75%
       
      genial, es lo que yo estaba buscando, gracias, es la mejor respuesta.
      0
  4. Reivax962 Mensajes publicados 3742 Estado Miembro 1 011
     
    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
    2
  5. uswill
     
    En realidad, mi problema es cargar la imagen seleccionada al navegar en una página web. Agradecería su ayuda para realizar esta tarea.
    2
  6. jakkihm Mensajes publicados 141 Estado Miembro 6
     
    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.
    1
  7. Reivax962 Mensajes publicados 3742 Estado Miembro 1 011
     
    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
    1
    1. joel
       
      Hola,
      Sé si he seguido bien, pero ¿cómo obtengo el archivo image.php? ¿Soy yo quien debe crearlo y cuál es su código?
      Gracias.
      0
  8. Concombre Masqué Mensajes publicados 2 Estado Miembro 2
     
    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
    1
  9. Concombre Masqué Mensajes publicados 2 Estado Miembro 2
     
    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 :)
    1
  10. rio
     
    <img src="<? echo($data['field_9']); ?>">
    o
    <img src="<?= $data['field_9'] ?>">
    1