[TUTORIAL]Subir archivos a Base de datos MySQL

breedx

New Member
Messages
4
Reaction score
0
Points
0
Este tuto es para que aprendais a hacer un Upload de archivos mediante PHP y guardar los datos en una base de datos MySQL.

Comenzare comentando que en este caso vamos a tener que recurrir a un tipo de campo MySQL no muy utilizado en el ambito de nuestra comunidad asi que os voy a dar de paso varias indicaciones sobre el campo BLOB.

Este tipo de campo, BLOB, permite guardar contenido de tipo Binario, esto quiere decir que podemos guardar imagenes, archivos de sonido y multimedia (no todo tipo de archivo, por eso yo solo voy a trabajar con imagenes).

Codigo SQL
PHP:
CREATE TABLE `imagenes` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(30) NOT NULL default '',
  `tipo` varchar(30) NOT NULL default '',
  `descripcion` varchar(255) NOT NULL default '',
  `fecha` varchar(255) NOT NULL default '',
  `ip` varchar(255) NOT NULL default '',
  `imagen` mediumblob NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
Como veis he usado un campo de tipo mediumblob pero tambien podeis blob, tinyblob, longblob,...

upload.php
PHP:
<?PHP
PHP:
[b]//Conexion[/b]
[b]if (isset($_POST['enviar'])) {[/b]
[b]    $tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");[/b]
[b]    $maximo = 102400; //100Kb[/b]
[b]    if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido?[/b]
[b]        if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto?[/b]
[b]            $fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen[/b]
[b]            $imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen[/b]
[b]            $imagen = addslashes($imagen);[/b]
[b]            fclose($fp); //Cerramos imagen[/b]
[b]            if(!get_magic_quotes_gpc())    $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre[/b]
[b]            else $nombre = $_FILES['imagen']['name'];[/b]
[b]            $query = "INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";[/b]
[b]            $query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";[/b]
[b]            $query.= mysql_real_escape_string($_POST['descripcion'])."','";[/b]
[b]            $query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";    [/b]
[b]            if (mysql_query($query)) echo '<img src="visor.php?mostrar='.mysql_insert_id().'">';[/b]
[b]            else echo mysql_error();    [/b]
[b]        } else echo "El formato del archivo no es correcto o es mayor de 100Kb";[/b]
[b]    } else echo "La imagen no ha sido subida";[/b]
[b]}[/b]
[b]//Desconexion DB[/b]
[b]?>[/b]
[b]<form enctype="multipart/form-data" method="POST">[/b]
[b]Imagen: <input type="file" name="imagen" /><br />[/b]
[b]Breve Descripcion: <input type="text" name="descripcion" /> <i>(Opcional)</i><br /><br />[/b]
[b]<input type="submit" name="enviar" value="Enviar" />[/b]
[b]</form>[/b]
visor.php
PHP:
<?PHP
PHP:
[b]if (is_numeric($_GET['mostrar'])) {[/b]
[b]    // Conexion a la Base de Datos[/b]
[b]    $query = mysql_query("SELECT * FROM `imagenes` WHERE id = '".$_GET['mostrar']."'") or exit();[/b]
[b]    if (!mysql_num_rows($query)) exit(header("HTTP/1.0 404 Not Found"));[/b]
[b]    $datos = mysql_fetch_array($query);[/b]
[b]    header("Content-Type: ".$datos['tipo']);[/b]
[b]    echo $datos['imagen'];[/b]
[b]    //Desconexion[/b]
[b]} else header("HTTP/1.0 404 Not Found");[/b]
[b]?>[/b]
Creo que el codigo se explica bastante por si mismo y por los comentarios que he dejado en las lineas, aún así podeis preguntarme cualquier cosa que querais.

Si no os funciona en vuestro servidor es porque la version de PHP que usais no es compatible con $_FILES, por tanto debereis cambiar $_FILES por $_HTTP_POST_FILES y supongo que no habra problemas.bueno adios
Salu2
 

hezuo

New Member
Messages
174
Reaction score
0
Points
0
asu que buen dato! gracias por tu aporte, ahora tratare de implementarlo en mi sitio
 

rikardo

New Member
Messages
4
Reaction score
0
Points
0
wow esto era lo que estaba buscano boy a ver si me funciona gracias tio
 

detodoseries

Community Advocate
Community Support
Messages
1,288
Reaction score
3
Points
38
un buen aporte a mas de uno le alegraras el dia cuando se tope con este post

saludos
 
Top