Como descodificar imagen devuelta por mysql
Ya llevo tiempo con este tema y no encuentro solución.
Después de leer y releer post sobre "como subir imágenes a bd mysql"(he de decir que soy muy novato en php y mysql) por fin encuentro uno que me lo guarda, este es el código:
<?php
include ("conecta.php");
if (isset($_POST['enviar'])) {
$tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");
$maximo = 202400; //200Kb
if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido?
if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto?
$fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen
$imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen]
$imagen = addslashes($imagen);
fclose($fp); //Cerramos imagen
if(!get_magic_quotes_gpc()) $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre
else $nombre = $_FILES['imagen']['name'];
$query = "INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";
$query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";
$query.= mysql_real_escape_string($_POST['descripcion'])."','";
$query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";
if (mysql_query($query)) echo '<img src="visor.php?mostrar='.mysql_insert_id().'">';
else echo mysql_error();
} else echo "El formato del archivo no es correcto o es mayor de 200Kb";
} else echo "La imagen no ha sido subida";
}
?>
Pero el problema viene cuando quiero que mysql me muestre la imagen.
Tengo 2 formas de pedirle la consulta
1ª<?php
if (is_numeric ($_GET['mostrar'])) {
include ("conecta.php");
$querry=mysql_query (SELECT * FROM imagenes WHERE id = '".$_GET['mostrar']."'") or exit();
if (!mysql_num_row($query));
$datos=mysql_fetch_array($query);
header("Content-Type: ".$datos['tipo']);
} else header ("HTTP/1.0 404 Not Found");
?>
Esta me dice "Sin definir index:'mostrar'".
Y la 2ª forma es una tabla con while ($row=mysql_fetch_array($result));
Esta me devuelve la imagen codificada.
¿Cómo pedir que me devuelva la imagen sin codificar en la 2ª o que falla en la primera?
Después de leer y releer post sobre "como subir imágenes a bd mysql"(he de decir que soy muy novato en php y mysql) por fin encuentro uno que me lo guarda, este es el código:
<?php
include ("conecta.php");
if (isset($_POST['enviar'])) {
$tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");
$maximo = 202400; //200Kb
if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido?
if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto?
$fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen
$imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen]
$imagen = addslashes($imagen);
fclose($fp); //Cerramos imagen
if(!get_magic_quotes_gpc()) $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre
else $nombre = $_FILES['imagen']['name'];
$query = "INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";
$query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";
$query.= mysql_real_escape_string($_POST['descripcion'])."','";
$query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";
if (mysql_query($query)) echo '<img src="visor.php?mostrar='.mysql_insert_id().'">';
else echo mysql_error();
} else echo "El formato del archivo no es correcto o es mayor de 200Kb";
} else echo "La imagen no ha sido subida";
}
?>
Pero el problema viene cuando quiero que mysql me muestre la imagen.
Tengo 2 formas de pedirle la consulta
1ª<?php
if (is_numeric ($_GET['mostrar'])) {
include ("conecta.php");
$querry=mysql_query (SELECT * FROM imagenes WHERE id = '".$_GET['mostrar']."'") or exit();
if (!mysql_num_row($query));
$datos=mysql_fetch_array($query);
header("Content-Type: ".$datos['tipo']);
} else header ("HTTP/1.0 404 Not Found");
?>
Esta me dice "Sin definir index:'mostrar'".
Y la 2ª forma es una tabla con while ($row=mysql_fetch_array($result));
Esta me devuelve la imagen codificada.
¿Cómo pedir que me devuelva la imagen sin codificar en la 2ª o que falla en la primera?
1 respuesta
Respuesta de Jorge Vila
1