Comunidad oficial de diseñadores web, web developers y Webmasters. Aqui podemos tratar temas actuales sobre diseño y tecnología. Podemos compartir y actualizarnos. Photoshop, Flash, PHP, ASP, Java, HTML, CSS, MySQL, CMS, etc. Unite YA y lee los Sticky
Ver más- 13,065 Miembros
- 9,531 Temas
- 3,449 Seguidores
¡Ayuda! pagina que almacene imagen en mysql y la muestr(php
Necesito almacenar una imagen en una base de datos mysql(ya se que se gastan recursos necesarios y que seria mejor guardarla en una carpeta, esa es otra parte que ya hice, pero es una tarea de la universidad) y luego mostrar todas las imágenes que han estados almacenadas utilizando php.
ya pude ingresar la imagen a la BD pero no la puedo recuperar.
Esta es la estructura de la tabla:
Nombre de la tabla = imagen
-codImagen -- int -- aunto incremento.
-nomImagen -- varchar(50).
-fecha -- varchar(10).
-imagen -- longbolb.
-tipo -- varchar(10).
-size --varchar(10).
Luego subo la imagen utilizando este codigo:
<?php
$fecha = date("d /m /y");
$imag1=$_POST['img1'];
$nomImag=$_FILES["img1"]["name"];
$tipo = $_FILES["img1"]["type"];
$size=$_FILES["img1"]["size"];
$fp = fopen($_FILES['img1']['tmp_name'], 'r'); //Abrimos la imagen
$imagen = fread($fp, filesize($_FILES['img1']['tmp_name'])); //Extraemos el contenido de la imagen
$imagen = addslashes($imagen);
fclose($fp); //Cerramos imagen
$com=mysql_query("INSERT INTO imagen (codImagen,nomImagen,fecha,imagen,tipo,size)
VALUES ('','$nomImag','$fecha','$imagen','$tipo','$size')");
if($com)
{
echo "<h1>Imagen subida a BD con exito</h1>";
}
else
{
echo"<h1>ERROR -- Intente nuevamente</h1>";
}
?>
Todo eso me funciona, todo bien(no me tira ningún error y en la base de datos me aparecen todos los campos llenos)
luego intento mostrar la imagen utilizando este codigo:
<?php
$conexion = mysql_connect("127.0.0.1","root","*****")
or die ("No se pudo conectar a la BD");//conexion a host
$bd=mysql_select_db("pv",$conexion)or die("no se conecto");//conexion a BD
$tem=mysql_query("SELECT * FROM `imagen`")
or die("Intente nuevamente");//consulta a BD
$row = mysql_fetch_array($tem);
$tipo=$row["tipo"];
header("Content-type: $tipo");
echo $row['imagen'];
?>
y lo implemento en otro archivo utilizando:
<img src='Imagenes/mostrarBD.php'width='150'height='150'/><br>
El archivo se tiene por nombre mostrarBD.php y se encuentra dentro de una carpeta con el nombre "Imagenes"
Lo único que hace es mostrarme un recuadro con una x, si intento coloco en el navegador directamente la direccion "http://localhost/SubirImagen/Imagenes/mostrarBD.php" m̶e̶ ̶"̶d̶e̶s̶c̶a̶r̶g̶a̶"̶ ̶u̶n̶a̶ ̶i̶m̶a̶g̶e̶n̶ ̶c̶o̶n̶ ̶e̶l̶ ̶n̶o̶m̶b̶r̶e̶ ̶y̶ ̶t̶o̶d̶o̶ pero cuando intento verla me da error.
gracias a la corrección de HeinrichB ya no me "descarga" pero cuando agrego la dirección "http://localhost/SubirImagen/Imagenes/mostrarBD.php" no me aparece nada y me sigue mostrando la x si utilizo
<img src='Imagenes/mostrarBD.php'width='150'height='150'/><br>
Creo que mi problema es en los headers mas no se. Ahora no se si sera en el momento de convertirla y guardarla en la base de datos...
Si alguien me puede ayudar se lo agradecería mucho.
De ante mano muchas gracias.
- 0Calificación
- 0Seguidores
- 188Visitas
- 0Favoritos
Global
Argentina
Chile
Colombia
España
México
Perú
Uruguay
Venezuela
14 respuestas
Como se hace para que no aparezcan esas caritas, perdón por ello.
pone el codigo entre las etiquetas code
[codecodigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]
pone el codigo entre las etiquetas code
[[]b]code]codigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]
pone el codigo entre las etiquetas code
[code]codigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]
Muchas gracias, por lo de la etiqueta code, se ve y se entiende mejor.
Si, tus problemas son los headers, con esos headers le estás indicando al navegador que descargue y no que muestre, reemplaza todos los headers con:
header("Content-Type: image/jpeg");Puedes reemplazar el jpeg por gif o png, según lo que quieras...
Gracias por responder
, ya hice el cambio pero sigue sin funcionar, ahora yo no me descarga nada como antes pero no me imprime nada tampoco, si pruebo colocando directamente "http://localhost/SubirImagen/Imagenes/mostrarBD.php" me aparece en blanco y si lo coloco <img src='Imagenes/mostrarBD.php'width='150'height='150'/><br> solo el recuadro con la x, a si que sigue sin funcionar..¿Otra idea?
Gracias.
Sé que quizás suene tonto pero... Pusiste el "echo" después del header verdad??

De otra forma no se me ocurre qué es lo que puede estar fallando, aquí te paso todo tu código modificado:
<?php
$conexion = mysql_connect("127.0.0.1","root","*****")
or die ("No se pudo conectar a la BD");//conexion a host
$bd=mysql_select_db("pv",$conexion)or die("no se conecto");//conexion a BD
$tem=mysql_query("SELECT * FROM `imagen`")
or die("Intente nuevamente");//consulta a BD
$row = mysql_fetch_array($tem);
header("Content-Type: image/jpeg");
echo $row['imagen'];
?>
Gracias por responder, pero si lo había puesto, mas sigue sin mostrarme la imagen, a lo mejor sera un error en la parte de convertir la imagen a bolb o el tipo o no se, voy a intentar convertirla de otra forma, haber si puedo y si me funciona, cuando termine el código lo voy a poner.
Si a alguien se le ocurre una solución pues bienvenido sea.
cuando yo ocupo poner fotos en mis webs mediante el select y la funcio row saco las imagenes y luego pongo esto en la parte donde quiero que se vea y un ciclo while para sacar todas las fotos que esten asociados con la categoría


<div align="center"><img src="productos/image/<?php echo $row_Recordset1['strImagen']; ?>" width="110" height="80" /></div>
y al final se miran asi
algo así pongo obviamente que el select no lo pongo por que ya lo tienes hecho supongo, pero yo mediante este ciclo es como saco toda la inf de los productos o lo que sea que este haciendo
si quieres que te lo explique mejor o te ayude mándame un mp
@tangamandapia muchas gracias pero me sigue sin funcionar, lo que tu me colocas ya lo había intentado y nada, cuando le quito el header me muestran un montón de signos y caracteres y no encuentro como solucionarlo porque cuando le pongo header("Content-Type: image/jpeg"
; simplemente no sale una pantalla en blanco como si no imprimiese nada.
mira este script es el que yo pongo dentro de mi archivo productos_add
<script>
function subirimagen()
{
self.name = 'opener';
remote = open('gestionimagen.php', 'remote', 'width=400,height=150,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,fullscreen=no, status=yes');
remote.focus();
}
</script>
se activa cuando el usuario presiona el botón subir imagen
<label>
<input name="strImagen" type="text" id="strImagen" />
<input type="button" name="Submit" value="Subir Imagen" onclick="javascript:subirimagen();"/></label>
y abre otro archivo que se llama gestionimagen.php y ese archivo es el que hace toda la funcion de subir el archivo ala carpeta donde quiero que se guarde y le devuelve el valor a producto_add
<?php if ((isset($_POST["enviado"])) && ($_POST["enviado"] == "form1")) {
$nombre_archivo = $_FILES['userfile']['name'];
move_uploaded_file($_FILES['userfile']['tmp_name'], "../documentos/productos/".$nombre_archivo);
?>
<script>
opener.document.form1.strImagen.value="<?php echo $nombre_archivo; ?>";
self.close();
</script>
<?php
}
else
{?>
<form action="gestionimagen.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<p>
<input name="userfile" type="file" />
</p>
<p>
<input type="submit" name="Submit" value="Subir Imagen" />
</p>
<input type="hidden" name="enviado" value="form1"/>
</form>
<?php }?>
y cuando presiono guardar queda guardado tanto en la bd como en la carpeta que le especifico y ya despues haciendo uso de un select que puede ser creado a pie o por los recordset de dreamweaver mandas llamar la imagen
<div class="fotoproducto"><img src="documentos/productos/<?php echo $row_DatosProductos['strImagen']; ?>" width="110" height="90" /></div>
Muchas gracias, pero eso es para guardarla en una carpeta, lo único que almacenas en la bd es el nombre de la imagen.
Igual gracias.