[PHP]Subir imagenes a tu Base de Datos (Guardando en binario)

LOKITOZZZ

Usuario Casual nvl. 2
19 Jun 2008
611
6
36
Bueno lo primero que necesitamos es nuestra tabla
Código:
(CREATE) TABLE images (
  id int(10) unsigned NOT NULL auto_increment,
  image blob NOT NULL,
  name varchar(255) NOT NULL default '',
  weight varchar(15) NOT NULL default '',
  type varchar(25) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Luego el formulario por el cual se subira nuestra imagen
formulario.php
Código:
<HTML>
<HEAD>
<TITLE>Binario a BD</TITLE>
</HEAD>
<BODY>
<?php
if (isset($_GET['proceso'])){
echo $_GET['proceso']."<br>";
}
?>
<FORM enctype="multipart/form-data" method="post" action="insertar.php">
Archivo: <INPUT type="file" name="archivo" size="30">
<INPUT type="submit" name="submit" value="Subir archivo">
</FORM>
</BODY>
</HTML>
El archivo por el cual se insertara nuestra imagen en la Base de datos
insertar.php
Código:
<?php
//Primero, analiza si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}
//Establecemos una conexión con la base de datos.
$Host = "localhost";
$User = "root";
$Password = "pass";
$DataBase = "Midb";
$conexion = mysql_connect($Host,$User,$Password)
or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db($DataBase,$conexion)
or die("No se puede seleccionar BD");
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;
 
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];
//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO images (id, image, name, weight, type) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion)
or die("No se pudo insertar los datos en la base de datos.");
header("location: imagenes.php");  
exit;
?>
Ahora el archivo para ver la imagen
ver.php
Código:
<?php
if(isset($_GET['id'])) {
//Establecemos una conexión con la base de datos.
$Host = "localhost";
$User = "root";
$Password = "pass";
$DataBase = "Midb";
$conexion = mysql_connect($Host,$User,$Password)
or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db($DataBase,$conexion)
or die("No se puede seleccionar BD");
$sql = "SELECT name,image,type,weight FROM images WHERE id='".$_GET['id']."'";
    $consulta = mysql_query($sql,$conexion);
    $datos = mysql_result($consulta,0,"image");
    $tipo = mysql_result($consulta,0,"type");
    $nombre = mysql_result($consulta,0,"name");
    $peso = mysql_result($consulta,0,"weight");
 
    header("Content-type: $tipo");
    header("Content-length: $peso");
    header("Content-Disposition: inline; filename=$nombre");
 
   echo $datos;
}
?>
Y por ultimo el archivo para ver todas las imagenes guardadas en nuestra base de datos
imagenes.php
Código:
<?php
//Establecemos una conexión con la base de datos.
$Host = "localhost";
$User = "root";
$Password = "pass";
$DataBase = "Midb";
$conexion = mysql_connect($Host,$User,$Password)
or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db($DataBase,$conexion)
or die("No se puede seleccionar BD");
$sql = "SELECT id,name,type,weight FROM images";
$consulta = mysql_query($sql)
or die ("No se pudo ejecutar la consulta");
    While ($registro=mysql_fetch_assoc($consulta)){
        echo "<img src=\"ver.php?id=".$registro['id']."\">";
        echo "<br> Nombre archivo: ".$registro['archivo_nombre'];
        echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
        echo "<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
    }
?>
PD: Este Script no lo desarrolle yo pero tiene muchos cambios hechos por mi.
PD: Clickeen mi pokemon...