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
  • 0

¡Ayuda! pagina que almacene imagen en mysql y la muestr(php

Muy buenas, tengo un pequeño problema y necesito su ayuda.

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($fpfilesize($_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.
  • 0
  • 0Calificación
  • 0Seguidores
  • 188Visitas
  • 0Favoritos

14 respuestas

@gastondla35 dijo Hace más de 7 meses:

pone el codigo entre las etiquetas code
[codecodigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]

@gastondla35 dijo Hace más de 7 meses:

pone el codigo entre las etiquetas code
[[]b]code]codigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]

@gastondla35 dijo Hace más de 7 meses:

pone el codigo entre las etiquetas code
[code]codigo codigo codigocodigo codigo codigo
codigo codigo codigo
codigo codigo codigo[/code]

@HeinrichB dijo Hace más de 7 meses:

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...

@HeinrichB dijo Hace más de 7 meses:

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']; 

?>

@tangamandapia dijo Hace más de 7 meses:

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

dijo:

<div class="resultadoproductos"> <?php if ($totalRows_Recordset1 > 0) { // Show if recordset not empty ?> <?php do { ?> <div class="MostraProdutos"><div class="fotoproducto"> <div align="center"><img src="videos/image/<?php echo $row_Recordset1['strImagen']; ?>" width="110" height="80" /></div> </div> <div class="textoproducto"><?php echo $row_Recordset1['strNombre']; ?><br /> <a href="episodio_ver.php?recordID=<?php echo $row_Recordset1['idEpisodio']; ?>"><strong>ver video</strong></a> </div></div> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?> <?php } // Show if recordset not empty ?> <?php if ($totalRows_Recordset1 == 0) { // Show if recordset empty ?> Todavia no hay videos en esta Categoria <?php } // Show if recordset empty ?></div> </div>



si quieres que te lo explique mejor o te ayude mándame un mp

@Shavo2 dijo Hace más de 7 meses:

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

dijo:

<div class="resultadoproductos"> <?php if ($totalRows_Recordset1 > 0) { // Show if recordset not empty ?> <?php do { ?> <div class="MostraProdutos"><div class="fotoproducto"> <div align="center"><img src="videos/image/<?php echo $row_Recordset1['strImagen']; ?>" width="110" height="80" /></div> </div> <div class="textoproducto"><?php echo $row_Recordset1['strNombre']; ?><br /> <a href="episodio_ver.php?recordID=<?php echo $row_Recordset1['idEpisodio']; ?>"><strong>ver video</strong></a> </div></div> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?> <?php } // Show if recordset not empty ?> <?php if ($totalRows_Recordset1 == 0) { // Show if recordset empty ?> Todavia no hay videos en esta Categoria <?php } // Show if recordset empty ?></div> </div>



si quieres que te lo explique mejor o te ayude mándame un mp


//:/ Dreamweaver

@tangamandapia dijo Hace más de 7 meses:

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>

Tienes que ser miembro para responder en este tema