Crear base de datos y que se guarden

He creado una base de datos en mysql para guardar una imagen y un enlace, la base de datos tiene 4 campos "imagen_id (auto_increment), imagen (mediumblob), tipo_imagen (varchar 30), url (text). Hasta aquí bien. Pero lo único que se guarda es la imagen.

Este es mi formulario.html

<form action="almacenar.php" method="POST" enctype="multipart/form-data">
    <label for="imagen">Imagen:</label>
    <input type="file" name="imagen" id="imagen" /><br>
    <br>
    <strong>EMBED: </strong>
    <input name="embed" type="text" id="embed" size="50" /><br>
    <strong>URL: </strong>
    <input name="url" type="text" id="url=" size="50" /><br>
    <input type="submit" name="subir" value="Subir Imagen"/>
</form>

Este es el archivo almacenar.php

<?php
// Conexion a la base de datos
mysql_connect("BASE_DE_DATOS","USUARIO","") or die(mysql_error());
mysql_select_db("imagenes") or die(mysql_error());
// Comprobamos si ha ocurrido un error.
If (!isset($_FILES["imagen"]) || $_FILES["imagen"]["error"] > 0)
{
    echo "Ha ocurrido un error.";
}
else
{
    // Verificamos si el tipo de archivo es un tipo de imagen permitido.
    // y que el tamaño 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)
    {
        // Archivo temporal
        $imagen_temporal = $_FILES['imagen']['tmp_name'];
        // Tipo de archivo
        $tipo = $_FILES['imagen']['type'];
        // Leemos el contenido del archivo temporal en binario.
        $fp = fopen($imagen_temporal, 'r+b');
        $data = fread($fp, filesize($imagen_temporal));
        fclose($fp);
        //Podríamos utilizar también la siguiente instrucción en lugar de las 3 anteriores.
        // $data=file_get_contents($imagen_temporal);
        // Escapamos los caracteres para que se puedan almacenar en la base de datos correctamente.
        $data = mysql_escape_string($data);
        // Insertamos en la base de datos.
        $resultado = @mysql_query("INSERT INTO imagenes (imagen, tipo_imagen) VALUES ('$data', '$tipo')");
        if ($resultado)
        {
            echo "El archivo ha sido copiado exitosamente.";
        }
        else
        {
            echo "Ocurrió algun error al copiar el archivo.";
        }
    }
    else
    {
        echo "Formato de archivo no permitido o excede el tamaño límite de $limite_kb Kbytes.";
    }
}
?>

Y este archivo para mostrar la imagenes obtenerfotografia.php

<?php
// Conexion a la base de datos
mysql_connect("BASE_DE_DATOS", "USUARIO", "CONTRASEÑA") or die(mysql_error());
mysql_select_db("imagenes") or die(mysql_error());
if ($_GET['id'] > 0)
{
    // Consulta de búsqueda de la imagen.
    $consulta = "SELECT imagen, tipo_imagen FROM imagenes WHERE imagen_id={$_GET['id']}";
    $resultado = @mysql_query($consulta) or die(mysql_error());
    $datos = mysql_fetch_assoc($resultado);
    $imagen = $datos['imagen']; // Datos binarios de la imagen.
    $tipo = $datos['tipo_imagen'];  // Mime Type de la imagen.
    // Mandamos las cabeceras al navegador indicando el tipo de datos que vamos a enviar.
    header("Content-type: $tipo");
    // A continuación enviamos el contenido binario de la imagen.
    echo $imagen;
}
?>

Quisiera saber que hago mal o que hay mal en los códigos para que no guarde los enlace.

Y ya de paso saber como es la consulta para mostrar las imagenes y los enlaces.

1 respuesta

Respuesta
2

La url no te la guarda porque no se lo indicas en la SQL en el primer código, que tendría que ser algo así:

$resultado = @mysql_query("INSERT INTO imagenes (imagen, tipo_imagen, url) VALUES ('$data', '$tipo', '$url')");

y en $url tendrás que recoger previamente el valor introducido en el formulario.

Por la misma razón, la consulta del segundo código no te muestra la url, te falta seleccionarla de la tabla:

$consulta = "SELECT imagen, tipo_imagen, url FROM imagenes WHERE imagen_id={$_GET['id']}";

y luego ya puedes trabajar con ella.

Muchas gracias Sveinbjorn El Rojo, pero no consigo que se guarde en la base de datos, de todas maneras seguiré intentándolo haber si lo consigo.

Pues por mi parte poco más te puedo decir, porque el lenguaje php no lo controlo todavía. Pero en las SQL de las consultas has de incluir todos los campos con los que quieres trabajar, en la primera, quieres guardar los tres, por lo que tendrás que incluirlos en el INSERT INTO, y en la segunda, como los quieres mostrar, los has de seleccionar en el SELECT.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas