Programación Web y Scripting > PHP
Como Extraer Una Imagen De Una Bd
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 --- <html><head><title>Documento sin título</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body><form action="grabarimagen.php" method="post" enctype="multipart/form-data" name="form1"> <p>Imagen a subir: <input name="foto" type="file"></p> <p> <input name="Submit" type="submit" value="Enviar"></p></form></body></html>
el segundo es grabarimagen.php en este guardo la imagen en la BD y va de maravilla :whistling:
--- Código: Text --- <?php $foto_type = $_FILES['foto']['type']; $foto_name = $_FILES['foto']['name']; $foto_size = $_FILES['foto']['size']; // Compruebas que se ha subido un archivo if($foto_name != "") { $filetype = $foto_type; // Compruebas que se trata de una foto if (!strcmp($filetype, "image/gif") || !strcmp($filetype, "image/jpeg") || !strcmp($filetype, "image/pjpeg") || !strcmp($filetype, "image/x-png")) { $filename = $foto_name; $filesize = $foto_size; $file_tmp = $_FILES['foto']['tmp_name']; //abriendo archivo temporal $file = fopen($file_tmp, 'rb'); $filedata = fread($file, filesize($file_tmp)); $filedata = addslashes($filedata); fclose($file); //Insertando datos $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); mysql_query("INSERT INTO imagenes values('', '$filename', '$filetype', '$filesize', '$filedata')"); } }?>
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 --- <html><body><table border=1><tr> <td>Id</td> <td>Foto</td></tr><?php $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); $reg = mysql_query("SELECT * from imagenes"); $num = mysql_num_rows($reg); for($i=1; $i<=$num; $i++) { echo "<tr>"; echo "<td>".$i."</td>"; echo "<td>"; $file = mysql_fetch_array($reg); header("Content-disposition: filename=$file[filename]"); header("Content-Length: ".strlen($file[filedata])); header("Content-type: $file[filetype]"); header("Pragma: no-cache"); header("Expires: 0"); echo $file[filedata]; echo "</td>"; echo "</tr>"; }?></table></body></html>
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 ---<html><body><table border=1><tr> <td>Id</td> <td>Foto</td></tr><?php $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); $result = mysql_query("SELECT id from imagenes order by id"); while ($reg = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>".$reg['id']."</td>"; echo "<td>"; echo "<img src=\"imagen.php?id=".$reg['id']."\">"; echo "</td>"; echo "</tr>"; }?></table></body></html>
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 --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Documento sin título</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body><form action="grabarimagen.php" method="post" enctype="multipart/form-data" name="form1"> <p>Imagen a subir: <input name="foto" type="file"></p> <p> <input name="Submit" type="submit" value="Enviar"></p></form></body></html>
2)grabarimagen.php Este archivo da de alta nuestra imagen en la BD
--- Código: Text --- <?php $foto_type = $_FILES['foto']['type']; $foto_name = $_FILES['foto']['name']; $foto_size = $_FILES['foto']['size']; // Compruebas que se ha subido un archivo if($foto_name != "") { $filetype = $foto_type; // Compruebas que se trata de una foto if (!strcmp($filetype, "image/gif") || !strcmp($filetype, "image/jpeg") || !strcmp($filetype, "image/pjpeg") || !strcmp($filetype, "image/x-png")) { $filename = $foto_name; $filesize = $foto_size; $file_tmp = $_FILES['foto']['tmp_name']; //abriendo archivo temporal $file = fopen($file_tmp, 'rb'); $filedata = fread($file, filesize($file_tmp)); $filedata = addslashes($filedata); fclose($file); //Insertando datos $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); mysql_query("INSERT INTO imagenes values('', '$filename', '$filetype', '$filesize', '$filedata')"); } }?>
3)mostrar.php Este archivo sirve para mostrar las imagenes que tenemos ya en nuestra BD
--- Código: Text --- <html><body><table border=1 align="center"><tr> <td align="center">Id</td> <td align="center">Foto</td></tr><?php $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); $result = mysql_query("SELECT id from imagenes order by id"); while ($reg = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>".$reg['id']."</td>"; echo "<td>"; echo "<img src=\"imagen.php?id=".$reg['id']."\">"; echo "</td>"; echo "</tr>"; }?></table></body></html>
4)imagen.php Este fue el que mas dolor de cabeza me dio :huh: pero por fin quedo listo :lol:
--- Código: Text --- <?php $conexion = mysql_connect('localhost', 'root', '') or die("No se puede conectar"); $db = mysql_select_db('imagenes', $conexion) or die("No se puede seleccionar la BD"); $reg = mysql_query("SELECT * FROM imagenes WHERE id = ".$_GET['id'].""); $file = mysql_fetch_array($reg); header("Content-disposition: ".$file['filename'].""); header("Content-Length: ".strlen($file['filedata']).""); header("Content-type:".$file['filetype'].""); header("Pragma: no-cache"); header("Expires: 0"); echo $file['filedata'];?>
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
[#] Página Siguiente
Ir a la versión completa