Foros del Web » Programando para Internet » PHP »

Visualizar imagen de una base de datos

Estas en el tema de Visualizar imagen de una base de datos en el foro de PHP en Foros del Web. Hola Tengo un formulario que me permite cargar imágenes en una base de datos MySQL, juntamente con una pequeña descripción. Una vez cargada la imagen, ...
  #1 (permalink)  
Antiguo 11/03/2008, 08:49
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Sonrisa Visualizar imagen de una base de datos

Hola
Tengo un formulario que me permite cargar imágenes en una base de datos MySQL, juntamente con una pequeña descripción.
Una vez cargada la imagen, aparece en un listado y puedo visualizarla haciendo clic, en una nueva ventana.
Mi pregunta es:
A parte de la imagen, me gustaria que apareciera también la descripción, y demás campos que pueda añadir a la tabla.
No tengo idea de cómo hacerlo.
Alguien me puede ayudar?
Aquí está el script:
http://www.catube.net/blob/blob.php

Gracias por adelantado

Saludos
  #2 (permalink)  
Antiguo 11/03/2008, 08:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Visualizar imagen de una base de datos

Deberías de publicar el código que utilizas para desplegar la imagen y como es el proceso de visualización.

Saludos.
  #3 (permalink)  
Antiguo 11/03/2008, 09:24
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Sonrisa Re: Visualizar imagen de una base de datos

Si, tienes razón.
No es un script desarrollado por mi, lo encontré en un site, pero es de libre utililización y lo quiero adaptar a mis necesidades...
Aquí va:

<?php
$db_host = 'localhost'; // don't forget to change
$db_user = 'jacovi88';
$db_pwd = '11068jcv';

$database = 'test';
$table = 'ae_gallery';
// use the same name as SQL table

// Usar el mismo nombre que el cuadro de SQL
$password = '123';
// simple upload restriction,
// to disallow uploading to everyone

// Simple filtro de restricción de carga,
// Para no permitir la subida de imágenes a todo el mundo
if (!mysql_connect($db_host, $db_user, $db_pwd))
die("Can't connect to database");

if (!mysql_select_db($database))
die("Can't select database");

// This function makes usage of
// $_GET, $_POST, etc... variables
// completly safe in SQL queries

//Esta función hace uso de
//$ _GET, $ _POST, Etc .. Variables
//completamente seguro en consultas SQL
function sql_safe($s)
{
if (get_magic_quotes_gpc())
$s = stripslashes($s);

return mysql_real_escape_string($s);
}

// If user pressed submit in one of the forms

//Si el usuario presiona 'Enviar' en uno de los formularios
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// cleaning title field

//Limpia el campo 'title'
$title = trim(sql_safe($_POST['title']));

if ($title == '') // if title is not set- Si el 'title' no está definido
$title = '(empty title)';// use (empty title) string- Usa 'empty title'

if ($_POST['password'] != $password) // cheking passwors- Chequea password
$msg = 'Error: wrong upload password';
else
{
if (isset($_FILES['photo']))
{
@list(, , $imtype, ) = getimagesize($_FILES['photo']['tmp_name']);
// Get image type.
// We use @ to omit errors

//Obtener un tipo de imagen.
//Utilizamos @ para omitir errores
if ($imtype == 3) // cheking image type- Chequea el tipo de imagen.
$ext="png"; // to use it later in HTTP headers- Usarlo más tarde en cabeceras HTTP
elseif ($imtype == 2)
$ext="jpeg";
elseif ($imtype == 1)
$ext="gif";
else
$msg = 'Error: unknown file format';

if (!isset($msg)) // If there was no error- Si no hay error
{
$data = file_get_contents($_FILES['photo']['tmp_name']);
$data = mysql_real_escape_string($data);
// Preparing data to be used in MySQL query- Preparación de los datos que se utilizarán en la consulta MySQL

mysql_query("INSERT INTO {$table}
SET ext='$ext', title='$title',
data='$data'");

$msg = 'Success: image uploaded';
}
}
elseif (isset($_GET['title'])) // isset(..title) needed
$msg = 'Error: file not loaded';// to make sure we've using
// upload form, not form
// for deletion

//isset (título ..) necesarios
//para asegurarse de que hemos utilizando
//formulario de subida, no forma
//de eliminación

if (isset($_POST['del'])) // If used selected some photo to delete
{ // in 'uploaded images form';

//Si se utilizan algunas fotos seleccionadas que se suprima
//en el 'formulario de subida de imágenes'
$id = intval($_POST['del']);
mysql_query("DELETE FROM {$table} WHERE id=$id");
$msg = 'Photo deleted';
}
}
}
elseif (isset($_GET['show']))
{
$id = intval($_GET['show']);

$result = mysql_query("SELECT ext, UNIX_TIMESTAMP(image_time), data
FROM {$table}
WHERE id=$id LIMIT 1");

if (mysql_num_rows($result) == 0)
die('no image');

list($ext, $image_time, $data) = mysql_fetch_row($result);

$send_304 = false;
if (php_sapi_name() == 'apache') {
// if our web server is apache
// we get check HTTP
// If-Modified-Since header
// and do not send image
// if there is a cached version

// Si nuestro servidor web es Apache
// Obtenemos comprobar HTTP
// Si se modificó desde la cabecera
// y no envíó la imagen
// Si existe una versión en caché
$ar = apache_request_headers();
if (isset($ar['If-Modified-Since']) && // If-Modified-Since should exists
($ar['If-Modified-Since'] != '') && // not empty
(strtotime($ar['If-Modified-Since']) >= $image_time)) // and grater than
$send_304 = true; // image_time
}


if ($send_304)
{
// Sending 304 response to browser
// "Browser, your cached version of image is OK
// we're not sending anything new to you"


// Enviar respuesta 304 al navegador
// "El archivo, su versión en caché de la imagen está bien
// No estamos enviando algo nuevo para usted "
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ts).' GMT', true, 304);

exit(); // bye-bye- Adiós.
}

// outputing Last-Modified header- Salida última modificación cabecera
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $image_time).' GMT',
true, 200);

// Set expiration time +1 year
// We do not have any photo re-uploading
// so, browser may cache this photo for quite a long time

//Establecer tiempo de caducidad +1 años
// No tenemos ninguna foto para volver a cargar
// Así, navegador tiene en caché esta foto durante un largo tiempo
header('Expires: '.gmdate('D, d M Y H:i:s', $image_time + 86400*365).' GMT',
true, 200);

// outputing HTTP headers- Cabeceras HTTP de salida
header('Content-Length: '.strlen($data));
header("Content-type: image/{$ext}");

// outputing image- Imagen de salida
echo $data;
echo "Hola Mundo";
exit();
}
?>
<html><head>
<title>MySQL Blob Image Gallery Example</title>
</head>
<body>
<?php
if (isset($msg)) // this is special section for
// outputing message

//Sección especial para mensaje de salida
{
?>
<p style="font-weight: bold;"><?=$msg?>
<br>
<a href="<?=$PHP_SELF?>">recargar p&aacute;gina</a>
<!-- I've added reloading link, because
refreshing POST queries is not good idea

He añadido vínculo de recarga, porque refrescar
las consutas con POST no es buena idea -->
</p>
<?php
}
?>
<h1>Galer&iacute;a de im&aacute;genes en campo blob.</h1>
<h2>Im&aacute;genes cargadas en la base de datos:</h2>
<form action="<?=$PHP_SELF?>" method="post">
<!-- This form is used for image deletion

Este form se utiliza para borrar las imágenes-->
<?php
$result = mysql_query("SELECT id, image_time, title FROM {$table} ORDER BY id DESC");
if (mysql_num_rows($result) == 0) // table is empty
echo '<ul><li>No images loaded</li></ul>';
else
{
echo '<ul>';
while(list($id, $image_time, $title) = mysql_fetch_row($result))
{
// outputing list- Listado de salida
echo "<li><input type='radio' name='del' value='{$id}'>";
echo "<a href='{$PHP_SELF}?show={$id}'>{$title}</a> &ndash;";
echo "<small>{$image_time}</small></li>";
}

echo '</ul>';

echo '<label for="password">Password:</label><br>';
echo '<input type="password" name="password" id="password"><br><br>';

echo '<input type="submit" value="Delete selected">';
}
?>
</form>
<h2>Subir una imagen:</h2>
<form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
<label for="title">Descripci&oacute;n:</label><br>
<input type="text" name="title" id="title" size="64"><br><br>

<label for="photo">Imagen:</label><br>
<input type="file" name="photo" id="photo"><br><br>

<label for="password">Password:</label><br>
<input type="password" name="password" id="password"><br><br>

<input type="submit" value="upload">
</form>
</body>
</html>
  #4 (permalink)  
Antiguo 11/03/2008, 09:28
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Re: Visualizar imagen de una base de datos

Al agregar ese "Hola Mundo" te funcniona? Lo digo por que los headers son de una Imagen, y lo más probable es que si sacas ese "Hola Mundo" la imagen se muestre, de lo contrario no.
  #5 (permalink)  
Antiguo 11/03/2008, 09:42
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Sonrisa Re: Visualizar imagen de una base de datos

Ups!!
Soy un poco novato con PHP...
Era una prueba, el 'Hola mundo'...
Estuve haciendo pruebas, a ver si podia visualizar algún texto, antes de vincular a los demás campos de la bd y hacer que aparecieran juntamente con la imagen.
Al clicar en el vínculo, querría que apareciera el campo 'title', juntamente con la imagen.
También si la puedo llamar desde cualquier página por ejemplo con:

http://www.catube.net/blob/blob.php?show=15

que es la página que aparece al clicar el vínculo de una imagen concreta...

Si vas a la web donde lo tengo alojado, verás que funciona OK.
http://www.catube.net/blob/blob.php
  #6 (permalink)  
Antiguo 11/03/2008, 09:48
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Re: Visualizar imagen de una base de datos

Ok, me queda claro.

Cambia los vinculos de las imagenes para una pagina PHP, ej: mostrar_imagen.php?id=[ID] donde ID es el identificador de la imagen como en tu ejemplo, el numero 15.

En esta pagina agrega un tag <img>:

Código PHP:
Titulo de la Imagen: <?=$titulo?>
<img src="http://www.catube.net/blob/blob.php?show=<?=$_GET[id]?>"
Obten $titulo a travez de una query a la tabla y saca los datos que tengas disponible.
  #7 (permalink)  
Antiguo 11/03/2008, 10:00
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Visualizar imagen de una base de datos

A ver si lo entiendo
Creo una página php que me muestre el resto de campos de la bd y a través de un tag <img> visualizo la imagen correspondiente?
El problema es que tendré que paginar las imágenes, porqué habrá unas cuantas alojadas, y en cada visualización desearia que me mostrara la imagen, junto a algunos demás campos.
No se pueden visualizar estos campos de texto, en la misma pag. que aparece al clicar sobre los vínculos de las imágenes cargadas en la bd y luego paginar si las imagenes son muchas?

Me explico?
Gracias
  #8 (permalink)  
Antiguo 11/03/2008, 10:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Visualizar imagen de una base de datos

Si quieres paginar busca en el foro, la clase Paginator de JPinedo, o en dado caso puedes usar EasyPagination, ambas las puedes encontrar en el foro.

Saludos.
  #9 (permalink)  
Antiguo 11/03/2008, 10:13
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Visualizar imagen de una base de datos

Si, ya sé.
He visto alguana cosa al respecto, lo estoy probando...
Lo que pasa es que si no consigo que en la misma vista de página, aparezca la imagen conjuntamente con algún otro campo que yo desee, como el titulo o la descripción, no puedo probar nuevo código.
No es posible que aparezca directamente algún otro campo en la página que muestra la imagen al clicar un vínculo concreto, o que yo la pueda llamar desde cualquier otra página o nuevo vínculo, con:
http://www.catube.net/blob/blob.php?show=11
y aparezca la misma vista, con los campos que quiera visualizar?
Gracias
  #10 (permalink)  
Antiguo 11/03/2008, 10:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Visualizar imagen de una base de datos

Si puedes poner mas campos solo modifica esta linea:
Código PHP:
$result mysql_query("SELECT id, image_time, title FROM {$table} ORDER BY id DESC"); 
Ahí cambia los campos, o agrega los campos que quieras que aparezcan en tu lista y al ciclar por tus resultados agrega los campos.

Saludos.
  #11 (permalink)  
Antiguo 11/03/2008, 11:08
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
No funciona,
En esta consulta que dices tu GatorV, si te fijas, ya apunta a los campos 'id', 'image_time' y 'title', pero no obstante, si pruebas el código en el vículo web, veràs que solamente muestra la imagen, sin que aparezcan el resto de campos, que es lo que yo deseo ver...
Gracias

GatorV,
lo que necesito yo es que al clicar en un nombre del listado de imagenes que contiene la base de datos, al aparecer dicha imagen en una nueva página, tal como aparece correctamente, también se muestren los demás campos asociados a esta id, como el campo 'title' por ejemplo, o alguno más que pueda crear en un futuro...
Gracias

Última edición por GatorV; 11/03/2008 a las 11:29
  #12 (permalink)  
Antiguo 11/03/2008, 11:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Visualizar imagen de una base de datos

Si no es en el listado, si no en la pagina nueva, debes de hacer algo como lo que eft0 te dijo, crear una pagina nueva, haces tu consulta, seleccionas tu campo y luego mediante una etiqueta <img> muestras la imagen.

Saludos.
  #13 (permalink)  
Antiguo 11/03/2008, 11:57
 
Fecha de Ingreso: octubre-2005
Ubicación: Banyoles
Mensajes: 22
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Visualizar imagen de una base de datos

No acabo de entender del todo lo que me explica eft0, para mostrar los campos juntamente con la img. Me podeis dar una explicación más concisa?
Os lo agradezco de antemano
Saludos
Gracias
  #14 (permalink)  
Antiguo 11/03/2008, 12:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Visualizar imagen de una base de datos

Debes de crear una pagina PHP donde rescatas la clave:
Código PHP:
<?php
$id 
= (int) $_GET['show'];
// haces tu query y descargas la información:
$query "SELECT UNIX_TIMESTAMP(image_time), title FROM {$table} WHERE id=$id LIMIT 1";
$result mysql_query$query ) or die( mysql_error() );
$data mysql_fetch_array$result );
?>
Titulo: <?php echo $data['title']; ?><br />
Fecha: <?php echo date"Y-m-d"$data['UNIX_TIMESTAMP(image_time)'] ); ?><br />
Foto: <img src="show_foto.php?id=<?php echo $id?>" border="0" alt="<?php echo $data['title']; ?>" />
El archivo show_foto debe de tener algo similar a lo que tienes ahorita para descargar la foto de la base de datos.

Saludos.
  #15 (permalink)  
Antiguo 19/11/2009, 23:38
 
Fecha de Ingreso: mayo-2009
Mensajes: 48
Antigüedad: 15 años
Puntos: 0
Respuesta: Visualizar imagen de una base de datos

Tengo una duda con respecto a la forma en que está haciendo la subida de imágenes

¿Está subiendo la imágen a un directorio y en la base de datos la ruta y Id o subiendo todo el archivo a mysql?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:05.