Insertar imagen en base datos mysql

Necesito insertar una imagen desde un formulario en una base de datos mysql. He buscado algunos manuales pero no hay mucho al respecto estoy probando con este código pero no funciona. Cualquier ayuda que puedas darme estaría muy agradecido ya que lo necesito con urgencia.
CREATE TABLE `imagenes` (
`Nombre` VARCHAR(100),
`imagen` LONGBLOB NOT NULL
);
subir.php
<form method="post" action="guardar.php" enctype="multipart/form-data">
Nombre: <input type="text" name="nombre" maxlength="100"><br>
Imagen: <input type="file" name="imagen" size="40"><br>
<p><input type="submit" name="submit" value="Subir">
</form>
guardar.php
<?
// Configurar las dos lineas siguientes
mysql_connect("servidor","usuario","contraseña");
mysql_select_db("base_de_datos");
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($imagen)));
$nombre = $_POST["nombre"];
mysql_query("INSERT INTO imagenes (nombre,imagen) VALUES ('$nombre','$imagen')");
?>Se ha subido la imagen a la base de datos, puedes verla pulsando <a href="ver.php?nombre=<? Echo $nombre ?>">aquí</a>
ver.php
<?
$nombre = $_GET['nombre'];
// Configurar las dos lineas siguientes
@mysql_connect("servidor","usuario","contraseña");
@mysql_select_db("base_de_datos");
$query = "SELECT imagen FROM imagenes WHERE nombre = '$nombre'";
$result = @mysql_query($query);
$imagen = @mysql_result($result,0);
Header( "Content-type: image/jpeg");
echo $imagen;
?>

1 respuesta

Respuesta
1
¿Por qué quieres insertar la imagen en la base de datos? Sería más fácil tener las imágenes en una carpeta llamada por ejemplo imágenes y en la base de datos tener únicamente una referencia con el nombre de cada imagen y su localización.
La parte del formulario la tienes bien. El archivo guardar.php tienes que modificarlo que haga lo siguiente:
$ruta = "imagenes/{$_FILES['imagen'][name]}"
if(!copy($_FILES['imagen']['tmp_name'], $ruta)) {
echo "error al copiar el archivo";
} else {
echo "archivo subido con exito";
mysql_connect("servidor","usuario","contraseña");
mysql_select_db("base_de_datos");
$nombre = $_POST["nombre"];
mysql_query("INSERT INTO imagenes (nombre,ruta) VALUES ('$nombre','$ruta')");
echo "Se ha subido la imagen a la base de datos, puedes verla pulsando <a href='ver.php?nombre=$nombre'>aquí</a>";
}
El archivo ver.php quedaría asi:
ver.php
<html><head> ... </head> <body>
<?
$nombre = $_GET['nombre'];
@mysql_connect("servidor","usuario","contraseña");
@mysql_select_db("base_de_datos");
$query = "SELECT ruta FROM imagenes WHERE nombre = '$nombre'";
$result = @mysql_query($query);
$imagen = @mysql_result($result,0);
echo "<img src='$ruta'>";
?>
</body></html>
De todas formas, si aun así prefieres seguir insertando la imagen en la base de datos, en el archivo guardar.php cuando haces referencia al fichero subido desde el formulario, tienes que hacerlo con $_FILES['imagen'] y no directamente con $imagen.
¿No te dará problemas crear una consulta tan grande? Ten en cuenta que todo el contenido de la imagen va en la consulta y puede llegar a ser excesivo.
Muchas gracias por tu ayuda, tenia razón este es mejor que guardar la imagen en la base de datos. Te estaré molestando por que me inicio en este tipo de programación. Bye

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas