Por medio de esta entrada pretendo dar una guía para subir archivos al servidor a través de un script en php y guardar la ubicación del archivo en una base de datos de MySQL, en ningún momento pretendo decir que es la solución óptima pero si es la más coveniente a mi parecer para analizar y mejorar….eso lo dirán los comentarios que dejen.
Primero que todo tenemos que tener los permisos necesarios para subir y guardar el archivo ‘777′ (Lectura, escritura y ejecución) y acontinuación haremos lo siguiente:
1) Creamos el formulario para seleccionar el archivo:
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="form1"> <p align="center">Archivo <input name="archivo" type="file" id="archivo"> </p> <p align="center"> <input name="boton" type="submit" id="boton" value="Enviar"> </p> </form>
Es necesario definir el atributo enctype como “multipart/form-data”, esto es así por que debemos enviar un archivo y que el formulario esta apuntado “form action ” a el archivo php actual ($PHP_SELF).
2) Creamos el script en php para subir el archivo, este puede ir al inicio del código
<?php
if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name']))
{
$local = $HTTP_POST_FILES['archivo']['name'];
$remoto = $HTTP_POST_FILES['archivo']['tmp_name'];
$tipo = $HTTP_POST_FILES['archivo']['type'];
$extension = explode(".", $local);
switch($tipo)
{
case "image/jpeg":
// La variable para la BD
$ruta = "Imagenes/JPG/" . $local;
if(move_uploaded_file($remoto, $ruta))
{
$db_conexion = mysql_connect("servidor", "usuario", "contraseña");
mysql_select_db("upload");
mysql_query("INSERT INTO nom_tabla VALUES('','$local','$tipo','$ruta')")
or die (mysql_error());
mysql_close();
echo "<br><b>Imagen subida correctamente</b></br>";
}
else
echo "Error al Mover el archivo";
break;
case "image/png":
// La variable para la BD
$ruta = "Imagenes/PNG/" . $local;
if(move_uploaded_file($remoto, $ruta))
{
$db_conexion = mysql_connect("servidor", "usuario", "contraseña");
mysql_select_db("upload");
mysql_query("INSERT INTO nom_tabla VALUES('','$local','$tipo','$ruta')")
or die (mysql_error());
mysql_close();
echo "<br><b>Imagen subida correctamente</b></br>";
}
else
echo "Error al Mover el archivo";
break;
case "image/gif":
// La variable para la BD
$ruta = "Imagenes/GIF/" . $local;
if(move_uploaded_file($remoto, $ruta))
{
$db_conexion = mysql_connect("servidor", "usuario", "contraseña");
mysql_select_db("upload");
mysql_query("INSERT INTO nom_tabla VALUES('','$local','$tipo','$ruta')")
or die (mysql_error());
mysql_close();
echo "<br><b>Imagen subida correctamente</b></br>";
}
else
echo "Error al Mover el archivo";
break;
default:
echo "<br><b>El archivo debe ser imagen</b></br>";
break;
}
die();
}
?>
Si te ha gustado este post y/o te ha servido de ayuda puedes dejar un comentario, esa es una forma de agradecer y de incentivar a la gente para que siga trabajando en esta comunidad….
En este caso he utilizado una tabla con el Id_archivo, Normbre_archivo, Tipo_archivo y Ubicación, respectivamente, ha sido testeado y ha respondido bien, si quieren agregarle que busque el archivo antes de agregarlo para ver si ya existe pueden, colocarle una consulta y determinando el el número de resultados darán las opciónes necesarias…
Otra observación y es que me hizo falta definir es cuando se le da click en enviar con el formulario vacío, allí hay que definir si la variable “archivo” esta vacía, si lo necesitan, pueden dejar un comentario…
Si te ha gustado este post, puedes dejar un comentario como agradecimiento, así incentivas a que sigamos publicando temas de interés.










Gracias estoy analizando y probando……
bueno compañeros de ZdeS me disculpo por la demora en contestar el post es q no e tenido mucho tiempo libre.
les agradesco por montar una solucion a mi problema he puesto a correr el codigo y la verdad me toco hacer varios cambios para q me funcionara, uno de los mas importantes es q cuando pegue el codigo en dreamweaver las comillas q estan utilizando en el codigo no son las q reconoce php no c si ese es problema del editor q utilizaron para dar solucion a mi duda pero es solo cambiar las comillas bueno aqui les dejo el codigo q modifique:
<?php
if($boton)
{
if (is_uploaded_file($_FILES["archivo"]["tmp_name"]))
{
$local = $_FILES['archivo']['name']; //nombre del archivo
$remoto = $_FILES['archivo']['tmp_name'];//nombre del archivo en la carpte atem de windows
$tipo = $_FILES['archivo']['type'];// muestra el tipo de imagen
$extension = explode(" ",$local);
switch($tipo)
{
case "image/jpeg":
// La variable para la BD
$ruta = "imagenes/jpg/" . $local;
if(move_uploaded_file($remoto, $ruta))
{
$db_conexion = mysql_connect("localhost", "root", " ");
mysql_select_db("upload");
$sql="INSERT INTO imagen (Id_archivo,Normbre_archivo,Tipo_archivo,Ubicacion) VALUES (' ','$local','$tipo','$ruta')";
mysql_query($sql);
mysql_close();
echo "Imagen subida correctamente";
}
else
echo "Error al Mover el archivo";
break;
default:
echo "El archivo debe ser imagen";
break;
}
}
}
?>
Documento sin título
<form action="" method="post" enctype="multipart/form-data" name="form1">
Archivo
nota: les pego a continuacion el sql de la base de datos:
CREATE DATABASE `upload` ;
CREATE TABLE `imagen` (
`Id_archivo` int(11) NOT NULL auto_increment,
`Normbre_archivo` varchar(21) NOT NULL default ”,
`Tipo_archivo` varchar(20) NOT NULL default ”,
`Ubicacion` varchar(50) NOT NULL default ”,
PRIMARY KEY (`Id_archivo`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
Lo voy a provar ahora mismo. Me parece muy bueno el ejemplo puesto. Muchas Gracias desde Zaragoza.
esta muy bueno el codigo
pero tengo una preguna como pongo la ruta si estoy en remoto en la cual el servisor esta un linux:
$ruta=”localhost/modelo/fotografias”; no sube mi archivo alguien que me puede contestar
mi ruta es $ruta=”public_html/sis_en_linea1/modelo v2/fotografias/”;
pero no puedo subir
Te aseguraste de que tenga los permisos de ejecución esa carpeta. Lo más probable es que se te ha pasado por alto.
$ sudo chmod 777 nombre_de_carpeta
El permiso debe ser carpeta a carpeta.
Agur y cualquier cosa me comentas.