Imagenes en MySQL

Estimado Amigo:
Estoy trabajando en un modulo de php nuke, necesito que a un form dado, me agregue una imagen de mi disco rígido.
Para ello, he creado un campo en la tabla (longblob 100) donde se almacenaría la imagen.
Ya he conseguido, incluso, que el formulario cargue la cadena donde está la imagen en mi disco rígido, luce algo así como:
C:\MisDocumentos\Imagenes\imagen.jpg
Que como te imaginarás no es lo que necesito.
En realidad necesito definir de alguna manera que ese archivo "imagen.jpg" debe almacenarse en un directorio específico del servidor y además debo poder mostrarlo junto con el resto de los datos de ese campo.
¿Me podrías dar una mano con los pasos a seguir?
A ese campo yo lo llamé "foto"
Saludos
Víctor

1 respuesta

Respuesta
1
Hi,
Mira, lo que tengo hecho yo son dos script que guardan (store.php3) y muestran (gatdata.php3) en una tabla de mySQL.
Obviamente las imágenes quedan bajo la estructura de la tabla y no en archivos.
Te mando los scripts y el formato de la tabla a continuación:
----------------------
Para guardar la imagen
----------------------
<?php
// store.php3 - by Florian Dittmer <[email protected]>
// Example php script to demonstrate the storing of binary files into
// an sql database. More information can be found at http://www.phpbuilder.com/
?>
<HTML>
<HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD>
<BODY>
<?php
// code that will be executed if the form has been submitted:
if ($submit) {
// connect to the database
// (you may have to adjust the hostname,username or password)
MYSQL_CONNECT("localhost","root","password");
mysql_select_db("binary_data");
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$result=MYSQL_QUERY("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) ".
"VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
$id= mysql_insert_id();
print "<p>This file has the following Database ID: <b>$id</b>";
MYSQL_CLOSE();
} else {
// else show the form to submit new data:
?>
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</BODY>
</HTML>
---------------------
Fin guardar imagen
-----------------------
-----------------------
Para mostrar la imagen
-----------------------
<?php
// getdata.php3 - by Florian Dittmer <[email protected]>
// Example php script to demonstrate the direct passing of binary data
// to the user. More infos at http://www.phpbuilder.com
// Syntax: getdata.php3?id=<id>
if($id) {
// you may have to modify login information for your database server:
@MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("binary_data");
$query = "select bin_data,filetype from binary_data where id=$id";
$result = @MYSQL_QUERY($query);
$data = @MYSQL_RESULT($result,0,"bin_data");
$type = @MYSQL_RESULT($result,0,"filetype");
Header( "Content-type: $type");
echo $data;
};
?>
------------------
Fin mostrar imagen
------------------
El script de mostrar imagen se puede utilizar en un codigo HTML de la forma "<img src="getdata.php3?id=3">"
De otra forma si haces una aplicación (ej. En Delphi) podes mostrar la imagen agregando un simple componente que "chupa" los datos binarios y los transforma un una imagen.
Obviamente los scripts que te mande son lo base de lo base y son modificables. Se pueden agregar muchas cosas y no solo sirve para guardar y mostrar imágenes porque en la tabla llevas el tipo de datos que guardas.
La tabla tiene el formato:
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
Modifícala a tu gusto. Es solo un ejemplo que funciona.
Espero que te haya servido y cualquier otra consulta que tengas no dudes en preguntarme.
Nahuelon..
La respuesta es muy buena, pero tengo entendido que guardarlos bajo la estructura de la tabla, hará las consultas mucho más lentas. Hubiera preferido guardarlas como archivo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas