problemas con imagen
Hola a todos, tengo en problema de imprimir una imagen desde una tabla mysql, solo me aparece el recudro de la imagen con una X roja. Utilice la libreria gd2, y no funciona. que pued o hacer. No puedo guardar la ruta de la imagen
Hola,
Tienes que asegurarte de que la imagen se introduce en la tabla mediante los tags correspondientes de HTML.
Yo lo haria asi:
Supongamos que has creado una base de datos con un campo autonumerico ID, otro campo varchar para meter el tipo de la imagen llamado MIME y un tercer campo BLOB para meter la imagen llamado FOTO1.
1. -Crearia un fichero llamado "verblob.php" cuya función seria conectarse a la db y leer la foto que debe mostrar (ese dato se lo pasaremos por URL desde la página que contiene la tabla donde ha de aparecer la imagen).
2.- En la página donde debe aparecer la tabla con las imágenes, pondria:
echo "<table width=100% align=center border=0 cellspacing=2 bgcolor=#FFFFFF>";
while ($array = mysql_fetch_array($cad))
{
echo "<tr><td><img src=verblob.php?idfoto=",$array[ID],"/></td><tr>";
...
...
}
Asi se iria construyendo la tabla con tantas imagenes como tengas almacenadas en tu db.
Aquà te pongo un ejemplo del fichero verblob.php:
<?php
/*
* Mostrar una imagen desde blob mysql usando PHP
*
*/
// Control errores
error_reporting(E_ALL);
//Variables para la conexión a la db
$host="localhost";
$user="eluser";
$pass="elpassword";
$db="ladb";
$tabla="latabla";
// Parámetros para recuperar la imagen
# Recuperamos el parámetro GET con el id único de la foto que queremos mostrar
$idfoto = (isset($_GET["idfoto"])) ? $_GET["idfoto"] : exit();
// Asignamos a la variable campo el nombre real del campo que contiene
// la foto en la db
$campo = "FOTO1";
// Recuperamos la foto y el MIME de la tabla
$sql = "SELECT $campo, MIME FROM $tabla WHERE ID = $idfoto";
# Conexión a la base de datos
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$conn = mysql_query($sql, $con) or die(mysql_error($con));
$datos = mysql_fetch_array($conn);
// La imagen
$imagen = $datos[0];
// El mime type de la imagen
$mime = $datos[1];
// Gracias a esta cabecera, podemos ver la imagen
// que acabamos de recuperar del campo blob
header("Content-Type: $mime");
// Muestra la imagen
echo $imagen;
?>
De esta manera, en realidad lo que cargas en cada celda es el fichero verblob.php con el ID correspondiente a cada registro. Es pués el fichero verblob.php el que se encarga de mostrar la imagen, mediante la etiqueta header.
Espero que te sirva, aunque deberias optimizarlo liberando memoria y todo eso.
Tienes que asegurarte de que la imagen se introduce en la tabla mediante los tags correspondientes de HTML.
Yo lo haria asi:
Supongamos que has creado una base de datos con un campo autonumerico ID, otro campo varchar para meter el tipo de la imagen llamado MIME y un tercer campo BLOB para meter la imagen llamado FOTO1.
1. -Crearia un fichero llamado "verblob.php" cuya función seria conectarse a la db y leer la foto que debe mostrar (ese dato se lo pasaremos por URL desde la página que contiene la tabla donde ha de aparecer la imagen).
2.- En la página donde debe aparecer la tabla con las imágenes, pondria:
echo "<table width=100% align=center border=0 cellspacing=2 bgcolor=#FFFFFF>";
while ($array = mysql_fetch_array($cad))
{
echo "<tr><td><img src=verblob.php?idfoto=",$array[ID],"/></td><tr>";
...
...
}
Asi se iria construyendo la tabla con tantas imagenes como tengas almacenadas en tu db.
Aquà te pongo un ejemplo del fichero verblob.php:
<?php
/*
* Mostrar una imagen desde blob mysql usando PHP
*
*/
// Control errores
error_reporting(E_ALL);
//Variables para la conexión a la db
$host="localhost";
$user="eluser";
$pass="elpassword";
$db="ladb";
$tabla="latabla";
// Parámetros para recuperar la imagen
# Recuperamos el parámetro GET con el id único de la foto que queremos mostrar
$idfoto = (isset($_GET["idfoto"])) ? $_GET["idfoto"] : exit();
// Asignamos a la variable campo el nombre real del campo que contiene
// la foto en la db
$campo = "FOTO1";
// Recuperamos la foto y el MIME de la tabla
$sql = "SELECT $campo, MIME FROM $tabla WHERE ID = $idfoto";
# Conexión a la base de datos
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$conn = mysql_query($sql, $con) or die(mysql_error($con));
$datos = mysql_fetch_array($conn);
// La imagen
$imagen = $datos[0];
// El mime type de la imagen
$mime = $datos[1];
// Gracias a esta cabecera, podemos ver la imagen
// que acabamos de recuperar del campo blob
header("Content-Type: $mime");
// Muestra la imagen
echo $imagen;
?>
De esta manera, en realidad lo que cargas en cada celda es el fichero verblob.php con el ID correspondiente a cada registro. Es pués el fichero verblob.php el que se encarga de mostrar la imagen, mediante la etiqueta header.
Espero que te sirva, aunque deberias optimizarlo liberando memoria y todo eso.
