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
Como veis he usado un campo de tipo mediumblob pero tambien podeis blob, tinyblob, longblob,...
upload.php
visor.php
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
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;
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]
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]
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