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?

1 Respuesta

Respuesta
1
No entiendo lo que dices de imagen "codificada"...¿? ¿?
La imagen codificada. Me refiero a que me devuelve un montón de símbolos como estos:
ÿØÿà?JFIF??´?´??ÿá.Exif??MM?*???????????Ú?????
Le estás mostrando el contenido del gráfico, no el link al gráfico donde lo tengas en el servidor...¿?
Claro, no muestro el link porque, si te fijas, la imagen esta en un campo de la bd y no en una carpeta. La imagen ha sido subida como longblob, y al pedir la consulta de mysql en una tabla me la devuelve de esa manera.
¿No hay una forma de llamar a esa consulta para que devuelva la imagen tal cual es?
Aquí tienes una explicación, de todas formas te recomiendo que no llenes la BD con imágenes, es mejor guardar un link de donde estén en las carpetas del servidor. Como lo estás haciendo te llena la Bd de megas y megas de imágenes y ralentiza todo...
http://www.wellho.net/solutions/php-example-php-form-image-upload-store-in-mysql-database-retreive.html
Ok gracias, lo estudiaré, aunque el ingles no es mi fuerte ni por aproximación
Con esto, en castellano:
http://xromsystem.net/?p=282

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas