¡Hola!
Hace bastante tiempo que no posteaba ningun tutorial y es que no habia encontrado el momento, pero ya que son fiestas y que tengo tiempo libre he hecho este simple tutorial 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 SQLCREATE 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,...
UPLOADER<?PHP
//Conexion
if (isset($_POST['enviar'])) {
$tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");
$maximo = 102400; //100Kb
if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido?
if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto?
$fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen
$imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen
$imagen = addslashes($imagen);
fclose($fp); //Cerramos imagen
if(!get_magic_quotes_gpc())
$nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre
else $nombre = $_FILES['imagen']['name'];
$query = "INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";
$query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";
$query.= mysql_real_escape_string($_POST['descripcion'])."','";
$query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";
if (mysql_query($query)) echo '<img src="visor.php?mostrar='.mysql_insert_id().'">';
else echo mysql_error();
} else echo "El formato del archivo no es correcto o es mayor de 100Kb";
} else echo "La imagen no ha sido subida";
}
//Desconexion DB
?>
<form enctype="multipart/form-data" method="POST">
Imagen: <input type="file" name="imagen" /><br />
Breve Descripcion: <input type="text" name="descripcion" /> <i>(Opcional)</i><br /><br />
<input type="submit" name="enviar" value="Enviar" />
</form>VISOR<?PHP
if (is_numeric($_GET['mostrar'])) {
// Conexion a la Base de Datos
$query = mysql_query("SELECT * FROM `imagenes` WHERE id = '".$_GET['mostrar']."'") or exit();
if (!mysql_num_rows($query)) exit(header("HTTP/1.0 404 Not Found"));
$datos = mysql_fetch_array($query);
header("Content-Type: ".$datos['tipo']);
echo $datos['imagen'];
//Desconexion
} else header("HTTP/1.0 404 Not Found");
?>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.