Programación Web y Scripting > PHP

 Como Extraer Una Imagen De Una Bd

(1/2) > >>

Informix:
Hola que tal tengo un pequeño problema no se como mostrar una imagen que se encuentra en una BD  :blink: la puedo guardar asi:


--- Código: Text --- <?  $conexion = mysql_connect('localhost', 'root', '') or die("NO SE PUDO CONECTAR");  $bd = mysql_select_db("archivos", $conexion);   $archivo = $_FILES['file']['tmp_name'];  $tipo = $_FILES['file']['type'];  $file = fopen($archivo, 'rb');  $binario = fread($file, filesize($archivo));  $binario = addslashes($binario);  fclose($file);      //Insertando en la BD  mysql_query("INSERT INTO imagenes values('', '$binario', '$tipo')"); ?>  
el $binario es de tipo blob

he intentado asignandole ese campo a una variable y con un <img src=...>
pero creo que no funciona la verdad es que en esto si estoy mas nuevo y es por eso que recurro al foro para ver si alguien me puede ayudar

nos vemos  :kicking:

Avalon:
Hola Informix, fíjate en esta discusión

http://foros.solocodigo.com/index.php?showtopic=2251

En la segunda parte de mi respuesta explico como mostrar las fotos, creo que es lo que buscas.

Salu2,
Avalon

Informix:
:hola: de nuevo bueno pues sigo con el problema no se que este haciendo bien o mal  :unsure: pero aqui les pongo los codigos que he hecho por cierto Avalon me fue de gran ayuda el post que me enviaste me ayudo a aclarar algunas cosas

Tengo 3 archivos los cuales describire a continuacion

el primero se llama subirimagen.php en este no hay problema solo es la forma  :D


--- Código: Text --- &#60;html&#62;&#60;head&#62;&#60;title&#62;Documento sin t&iacute;tulo&#60;/title&#62;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=iso-8859-1&#34;&#62;&#60;/head&#62; &#60;body&#62;&#60;form action=&#34;grabarimagen.php&#34; method=&#34;post&#34; enctype=&#34;multipart/form-data&#34; name=&#34;form1&#34;&#62;  &#60;p&#62;Imagen a subir:    &#60;input name=&#34;foto&#34; type=&#34;file&#34;&#62;&#60;/p&#62;  &#60;p&#62;    &#60;input name=&#34;Submit&#34; type=&#34;submit&#34; value=&#34;Enviar&#34;&#62;&#60;/p&#62;&#60;/form&#62;&#60;/body&#62;&#60;/html&#62;  
el segundo es grabarimagen.php en este guardo la imagen en la BD y va de maravilla  :whistling:


--- Código: Text --- &#60;?php        &#036;foto_type = &#036;_FILES['foto']['type'];        &#036;foto_name = &#036;_FILES['foto']['name'];        &#036;foto_size = &#036;_FILES['foto']['size'];         // Compruebas que se ha subido un archivo        if(&#036;foto_name != &#34;&#34;)        {            &#036;filetype = &#036;foto_type;                // Compruebas que se trata de una foto            if (!strcmp(&#036;filetype, &#34;image/gif&#34;) || !strcmp(&#036;filetype, &#34;image/jpeg&#34;) ||                            !strcmp(&#036;filetype, &#34;image/pjpeg&#34;) || !strcmp(&#036;filetype, &#34;image/x-png&#34;))                {                &#036;filename = &#036;foto_name;                &#036;filesize = &#036;foto_size;                        &#036;file_tmp = &#036;_FILES['foto']['tmp_name'];                        //abriendo archivo temporal                        &#036;file = fopen(&#036;file_tmp, 'rb');                        &#036;filedata = fread(&#036;file, filesize(&#036;file_tmp));                        &#036;filedata = addslashes(&#036;filedata);                        fclose(&#036;file);                  //Insertando datos                         &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);                         &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);                          mysql_query(&#34;INSERT INTO imagenes values('', '&#036;filename', '&#036;filetype', '&#036;filesize', '&#036;filedata')&#34;);            }        }?&#62;  
Pero el tercero es mi dolor de cabeza  :angry:  como quiero mostrar las imagenes en una tabla que sea id y la imagen he hecho esto asi:


--- Código: Text --- &#60;html&#62;&#60;body&#62;&#60;table border=1&#62;&#60;tr&#62;        &#60;td&#62;Id&#60;/td&#62;        &#60;td&#62;Foto&#60;/td&#62;&#60;/tr&#62;&#60;?php       &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);       &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);       &#036;reg = mysql_query(&#34;SELECT * from imagenes&#34;);       &#036;num = mysql_num_rows(&#036;reg);        for(&#036;i=1; &#036;i&#60;=&#036;num; &#036;i++)        {                echo &#34;&#60;tr&#62;&#34;;                        echo &#34;&#60;td&#62;&#34;.&#036;i.&#34;&#60;/td&#62;&#34;;                        echo &#34;&#60;td&#62;&#34;;                        &#036;file = mysql_fetch_array(&#036;reg);                        header(&#34;Content-disposition: filename=&#036;file[filename]&#34;);                        header(&#34;Content-Length: &#34;.strlen(&#036;file[filedata]));                        header(&#34;Content-type: &#036;file[filetype]&#34;);                        header(&#34;Pragma: no-cache&#34;);                        header(&#34;Expires: 0&#34;);                        echo &#036;file[filedata];                        echo &#34;&#60;/td&#62;&#34;;                echo &#34;&#60;/tr&#62;&#34;;        }?&#62;&#60;/table&#62;&#60;/body&#62;&#60;/html&#62;  
Pero el resultado no es satisfactorio ya que me muestra bien la tabla, el id pero en la celda donde va la imagen me pone cosas asi


--- Código: Text --- ÿØÿàJFIFHHÿí„Photoshop 3.08BIMé Print InfoxHHô@ÿîÿîR(ü/Ð0/Àÿÿ//Ы k@Üÿÿÿÿÿÿÿÿ/Ы8BIMí ResolutionHH8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIMó Print Flags 8BIM Copyright   
LOL  :D  o sera que ya me volvi como Neo y veo las cosas con puro codigo  :lol: bueno me imagino que el problema es que imprime el binario tal cual, ojala puedan explicarme y ayudarme un poco mas en esto, espero no quitarles mucho tiempo de su valioso tiempo, estamos en contacto

 :kicking:

Avalon:
El problema está en el tercer archivo. El código que se encarga de mostrar la imagen debe ir en un archivo aparte (p.ej. imagen.php) por el tema de los headers.


--- Código: Text ---&#60;html&#62;&#60;body&#62;&#60;table border=1&#62;&#60;tr&#62;       &#60;td&#62;Id&#60;/td&#62;       &#60;td&#62;Foto&#60;/td&#62;&#60;/tr&#62;&#60;?php      &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);      &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);      &#036;result = mysql_query(&#34;SELECT id from imagenes order by id&#34;);      while (&#036;reg = mysql_fetch_array(&#036;result))       {               echo &#34;&#60;tr&#62;&#34;;                       echo &#34;&#60;td&#62;&#34;.&#036;reg['id'].&#34;&#60;/td&#62;&#34;;                       echo &#34;&#60;td&#62;&#34;;                       echo &#34;&#60;img src=&#092;&#34;imagen.php?id=&#34;.&#036;reg['id'].&#34;&#092;&#34;&#62;&#34;;                       echo &#34;&#60;/td&#62;&#34;;               echo &#34;&#60;/tr&#62;&#34;;       }?&#62;&#60;/table&#62;&#60;/body&#62;&#60;/html&#62;  

Haciéndolo así no deberías tener ningún problema. Y si lo tuvieras, aquí estamos para lo que haga falta.


Salu2,
Avalon

Informix:
LO LOGRE !!!!!!! POR FIN PUDE MOSTRAR LAS IMAGENES !!

y esto no hubiera sido posible sin la ayuda de Avalon

En verdad que muchas gracias !

a continuacion voy a poner los codigos para que les sirvan a otras personas que como yo no saben como hacer este proceso incluire el archivo sql para la base de datos por cierto contiene 3 fotos de unas bellezas portando la playera de mi equipo de Futbol el Club America a lo mejor no lo conocen a lo mejor si, pero es el mejor club de Mexico  B)

1)subirimagen.php Este archivo es el formulario para enviar nuestra imagen a la BD


--- Código: Text --- &#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34; &#34;http://www.w3.org/TR/html4/loose.dtd&#34;&#62;&#60;html&#62;&#60;head&#62;&#60;title&#62;Documento sin t&iacute;tulo&#60;/title&#62;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=iso-8859-1&#34;&#62;&#60;/head&#62; &#60;body&#62;&#60;form action=&#34;grabarimagen.php&#34; method=&#34;post&#34; enctype=&#34;multipart/form-data&#34; name=&#34;form1&#34;&#62;  &#60;p&#62;Imagen a subir:     &#60;input name=&#34;foto&#34; type=&#34;file&#34;&#62;&#60;/p&#62;  &#60;p&#62;    &#60;input name=&#34;Submit&#34; type=&#34;submit&#34; value=&#34;Enviar&#34;&#62;&#60;/p&#62;&#60;/form&#62;&#60;/body&#62;&#60;/html&#62;  
2)grabarimagen.php Este archivo da de alta nuestra imagen en la BD

--- Código: Text --- &#60;?php  &#036;foto_type = &#036;_FILES['foto']['type'];  &#036;foto_name = &#036;_FILES['foto']['name'];  &#036;foto_size = &#036;_FILES['foto']['size'];        // Compruebas que se ha subido un archivo  if(&#036;foto_name != &#34;&#34;)   {      &#036;filetype = &#036;foto_type;          // Compruebas que se trata de una foto      if (!strcmp(&#036;filetype, &#34;image/gif&#34;) || !strcmp(&#036;filetype, &#34;image/jpeg&#34;) ||          !strcmp(&#036;filetype, &#34;image/pjpeg&#34;) || !strcmp(&#036;filetype, &#34;image/x-png&#34;))     {          &#036;filename = &#036;foto_name;          &#036;filesize = &#036;foto_size;      &#036;file_tmp = &#036;_FILES['foto']['tmp_name'];      //abriendo archivo temporal      &#036;file = fopen(&#036;file_tmp, 'rb');      &#036;filedata = fread(&#036;file, filesize(&#036;file_tmp));      &#036;filedata = addslashes(&#036;filedata);      fclose(&#036;file);                          //Insertando datos       &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);       &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);            mysql_query(&#34;INSERT INTO imagenes values('', '&#036;filename', '&#036;filetype', '&#036;filesize', '&#036;filedata')&#34;);      }   }?&#62; 
3)mostrar.php Este archivo sirve para mostrar las imagenes que tenemos ya en nuestra BD


--- Código: Text --- &#60;html&#62;&#60;body&#62;&#60;table border=1 align=&#34;center&#34;&#62;&#60;tr&#62;      &#60;td align=&#34;center&#34;&#62;Id&#60;/td&#62;      &#60;td align=&#34;center&#34;&#62;Foto&#60;/td&#62;&#60;/tr&#62;&#60;?php     &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);     &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);     &#036;result = mysql_query(&#34;SELECT id from imagenes order by id&#34;);     while (&#036;reg = mysql_fetch_array(&#036;result))      {              echo &#34;&#60;tr&#62;&#34;;                      echo &#34;&#60;td&#62;&#34;.&#036;reg['id'].&#34;&#60;/td&#62;&#34;;                      echo &#34;&#60;td&#62;&#34;;                              echo &#34;&#60;img src=&#092;&#34;imagen.php?id=&#34;.&#036;reg['id'].&#34;&#092;&#34;&#62;&#34;;                      echo &#34;&#60;/td&#62;&#34;;              echo &#34;&#60;/tr&#62;&#34;;      }?&#62;&#60;/table&#62;&#60;/body&#62;&#60;/html&#62; 
4)imagen.php Este fue el que mas dolor de cabeza me dio  :huh: pero por fin quedo listo  :lol:


--- Código: Text --- &#60;?php  &#036;conexion = mysql_connect('localhost', 'root', '') or die(&#34;No se puede conectar&#34;);    &#036;db = mysql_select_db('imagenes', &#036;conexion) or die(&#34;No se puede seleccionar la BD&#34;);    &#036;reg = mysql_query(&#34;SELECT * FROM imagenes WHERE id = &#34;.&#036;_GET['id'].&#34;&#34;);    &#036;file = mysql_fetch_array(&#036;reg);    header(&#34;Content-disposition: &#34;.&#036;file['filename'].&#34;&#34;);  header(&#34;Content-Length: &#34;.strlen(&#036;file['filedata']).&#34;&#34;);  header(&#34;Content-type:&#34;.&#036;file['filetype'].&#34;&#34;);  header(&#34;Pragma: no-cache&#34;);  header(&#34;Expires: 0&#34;);  echo &#036;file['filedata'];?&#62;  
y listo  :kicking:  :bravo:

 :gracias: a todos (no puedo ocultar mi felicidad jejeje me habia quitado el sueño varios dias este problemita)

saludos a todos

Nota: Gran parte del código no lo escribi, solo fui modificando el que me facilito Avalon de acuerdo a mis necesidades, como siempre digo los creditos para el creador del source

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa