elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Mostrar imagen desde mysql con php
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar imagen desde mysql con php  (Leído 21,532 veces)
migue_coco

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Mostrar imagen desde mysql con php
« en: 21 Junio 2013, 19:22 pm »

Buenas a todos.
Les comento a ver si pueden ayudarme.
Por un lado, subo imagenes a la BDD de la siguiente forma:

Código:
<?php
//conexion a la base de datos
include("acceso.php");
// Nos conectamos a phpmyadmin
$conectar = mysql_connect($dbhost, $dbuser, $dbpasswd);
// Comprobamos que  nos pudieramos conectar a phpmyadmin
if (!$conectar) {
die('No se pudo conectar a la base: ' . mysql_error());
}
mysql_select_db($dbname) or die(mysql_error()) ;

//comprobamos si ha ocurrido un error.
if ( !isset($_FILES["imagen"]) || $_FILES["imagen"]["error"] > 0){
  echo "ha ocurrido un error";
} else {
  //ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
  //y que el tamano del archivo no exceda los 16MB
  $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
  $limite_kb = 16384;

  if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){

    //este es el archivo temporal
    $imagen_temporal  = $_FILES['imagen']['tmp_name'];
    //este es el tipo de archivo
    $tipo = $_FILES['imagen']['type'];
    //leer el archivo temporal en binario
                $fp     = fopen($imagen_temporal, 'r+b');
                $data = fread($fp, filesize($imagen_temporal));
                fclose($fp);


    $resultado = @mysql_query("INSERT INTO Usuarios (Imagen, Tipo_imagen) VALUES ('$data', '$tipo')") ;

    if ($resultado){
      echo "el archivo ha sido copiado exitosamente";
    } else {
      echo "ocurrio un error al copiar el archivo.";
    }
  } else {
    echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
  }
}
?>

Bien, se guarda la imagen en un campo BLOB y el type de la imagen en un campo VARCHAR.
Todo eso correcto.

Pero mi problema viene al intentar mostrar la imagen en una pagina con contenido.
Es decir, puedo usar este codigo para ver la imagen en una pagina nueva, y se ve la imagen sola, asi que la subida funciona:

Código:
<?php
mysql_select_db($dbname);
$sql= "SELECT Imagen, Tipo_imagen FROM Usuarios";
$result= mysql_query($sql, $conectar);
$row= mysql_fetch_assoc($result);


  //ahora colocamos la cabeceras correcta segun el tipo de imagen
  header("Content-type: ".$row['Tipo_imagen']."");

  echo ($row['Imagen']);
?>

Pero por ejemplo no podria poner ese codigo aqui:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<?php
mysql_select_db($dbname);
$sql= "SELECT Imagen, Tipo_imagen FROM Usuarios";
$result= mysql_query($sql, $conectar);
$row= mysql_fetch_assoc($result);


  //ahora colocamos la cabeceras correcta segun el tipo de imagen
  header("Content-type: ".$row['Tipo_imagen']."");

  echo ($row['Imagen']);
?>
</body>
</html>

(Se que faltan datos para la conexion, solo son ejemplos).
Si intento hacer eso, me da error por no poder modificar el Content-type de la pagina que incluye el codigo php...

Entonces como hago para mostrar la imagen??
Porque necesito poder cargar el type de la imagen de alguna forma para que lea la informacion del campo BLOB.

Y por otro lado, alguna idea de como modificar el nombre de la imagen al subirla respetando la extension del archivo?
Quisiera que la imagen tomara el nombre del usuario que la sube ($_COOKIE['Usuario'])
Pero con lo que hago, la renombro pero sin extension...

Gracias por su atencion y ayuda.

Un saludo.


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Mostrar imagen desde mysql con php
« Respuesta #1 en: 21 Junio 2013, 19:33 pm »

Lo que estas haciendo es mandar un header (html) y luego intentar mandar otro (imagen). Lo que tienes que hacer, es cargar cada imagen en un archivo separado y incluirlo.

Osease, tal y como lo haces aquí
Código
  1. <?php
  2. mysql_select_db($dbname);
  3. $sql= "SELECT Imagen, Tipo_imagen FROM Usuarios";
  4. $result= mysql_query($sql, $conectar);
  5. $row= mysql_fetch_assoc($result);
  6.  
  7.  
  8.  //ahora colocamos la cabeceras correcta segun el tipo de imagen
  9.  header("Content-type: ".$row['Tipo_imagen']."");
  10.  
  11.  echo ($row['Imagen']);
  12. ?>

Esto lo haces en un archivo... imagen.php por ejemplo. Y luego en el html solo cargas la imagen
Código
  1. <img src="imagen.php" alt="" />

PD: Esa forma de guardar imágenes (directo a la bd) me parece sumamente ineficiente...

Saludos


En línea

migue_coco

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Mostrar imagen desde mysql con php
« Respuesta #2 en: 21 Junio 2013, 19:39 pm »

Me da el mismo error al hacer eso.

Por que es ineficiente??
En línea

migue_coco

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Mostrar imagen desde mysql con php
« Respuesta #3 en: 21 Junio 2013, 19:46 pm »

Rectifico, no me da error.
Llevo todo el dia con esto y me cago en el apostrofe que faltaba de los huevos...

Vale, bien, ahora; lo de renombrar la imagen respetando su extension, alguna idea?

Y lo repito, ineficiente por?
Es mejor hacerlo subiendo las imagenes a un directoria y guardar la ruta en la tabla??
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Mostrar imagen desde mysql con php
« Respuesta #4 en: 21 Junio 2013, 19:53 pm »

Citar
Vale, bien, ahora; lo de renombrar la imagen respetando su extension, alguna idea

Tienes que separar la extension del resto del nombre.

Código
  1. <?php
  2. $nombre = 'miimagen.jpg';
  3. $extension = end(explode('.'),$nombre);
  4. echo $extension
  5. // .jpg

Citar
Y lo repito, ineficiente por?
Es ineficiente porque imagínate que tienes 30000 imágenes... tu bd pesaría muchísimo, las consultas seran lentas.. etc.. es mejor guardar la ruta y luego solicitarla.

Saludos
En línea

migue_coco

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Mostrar imagen desde mysql con php
« Respuesta #5 en: 21 Junio 2013, 20:12 pm »

Vale, para subirlas por FTP tengo este codigo (totalmente basico)

Código:
$idconexion = ftp_connect("www.mipagina.es");
$resultado = ftp_login($idconexion, "usuario","password");
if ((!$idconexion) || (!$resultado)) {
    echo "No se pudo conectar";
die;
}
ftp_pasv ($idconexion, false) ;
$remoto = $_FILES["archivo"]["name"];
$local = $_FILES["archivo"]["tmp_name"];
$folder= $remoto;
if(ftp_chdir($idconexion, "/public_html/subidas")){
    if (ftp_put($idconexion,$remoto,$local,FTP_BINARY)){
           echo "Subido correctamente}
else {
    echo "No se pudo subir la imagen";
}       
ftp_close($idconexion);


He entendido lo de separar la extension del nombre, pero no se aplicarlo aqui
$_FILES["archivo"]["name"]


Gracias por toda la ayuda!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
mostrar consusltas de MySQL
Programación Visual Basic
casaviella 0 1,142 Último mensaje 7 Abril 2008, 16:11 pm
por casaviella
Mostrar imagen desde campo BLOB
PHP
Littl3 5 11,236 Último mensaje 28 Mayo 2009, 01:38 am
por Nakp
Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Bases de Datos
Cioouw 3 11,726 Último mensaje 26 Abril 2010, 16:25 pm
por Cioouw
Al mostrar registros desde mysql trunca en el primer espacio
Desarrollo Web
the_sheriff_pino 2 2,688 Último mensaje 24 Abril 2013, 10:22 am
por the_sheriff_pino
Ayuda, mostrar imagen almacenada en mysql y mostrarla en un jlabel
Java
junca15 2 5,826 Último mensaje 17 Diciembre 2015, 21:03 pm
por junca15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines