En el tutorial anterior de Upload de archivos en PHP vimos como construir un formulario para subir archivos a un servidor y quedaba pendiente la parte del script para validar y dejar el archivo en nuestra carpeta remota.
Tabla de contenidos
2. Script en PHP para validar los campos y subir el archivo al servidor
Ya tenemos el formulado creado. Ahora vamos a validar los datos que el usuario nos enviará. Para eso, tenemos que enumerar bien que es lo que tenemos que comprobar para que los datos que se suban a nuestro servidor sean los correctos.
En un formulario de este tipo lo esencial que tenemos que validar es lo siguiente.
- Campos obligatorios informados (en este caso son todos lo que hay en el formulario)
- Tipo de video (.FLV para nuestro Caso)
- Tamaño del video
Lo primero que vamos a hacer es inicializar valores que más adelante utilizaremos en el código de este script:
[php]
$status = «»;
$error = «»;
$cont_error = 0;
//20mb equivale a 20479940,23 bytes
// 5mb equivale a 20479941 bytes
$limite_tamano = 20479941;
//Tipo de archivo .FLV
$tipo_archivo = «application/octet-stream»;
//Ruta donde se alojarán los archivos subidos.
$target_path = «uploads/»;
[/php]
Para poder utilizar los valores que ha introducido el usuario en el formulario, tal y como hemos mencionado antes, utilizaremos el método POST que es el que hemos definido en el FORM. La manera de recoger los datos será la siguiente:
[php]
$cliente = $_POST[«cliente»];
$titulo = $_POST[«title»];
$director = $_POST[«director»];
$video = $_FILES[‘video’][‘name’];
$tamano = $_FILES[‘video’][‘size’];
$tipo = $_FILES[‘video’][‘type’];
$archivo = $_FILES[‘video’][‘name’];
[/php]
Una vez nos hemos guardado todo en variables internas de nuestro script más fáciles de manejar (tamaño, tipo, archivo, prefijo), vamos a realizar las comprobaciones tal y como hemos mencionado en los puntos a validar (explicación de las líneas de código en forma de comentarios dentro del script):
[php]
//Comprobamos que se ha llegado a este punto a través del formulario
if ($_POST[«action»] == «upload»){
//Comprobamos que todos los campos estén informados
if ($cliente == «» || $titulo == «» || $director == «» || $archivo == «») {
$cont_error += 1;
$error .= «Error» . $cont_error . «: Por favor, rellene todos los campos
«;
}else{
//Comprobamos que el tipo de extensión sea .FLV
if ($tipo != $tipo_archivo){
$cont_error += 1;
$error .= «Error» . $cont_error . «: Tipo de fichero erróneo: El fichero seleccionado es de tipo » . $tipo . «
«;
$error .= «Por favor, selecciona un fichero de tipo .FLV
«;
}else{
//Comprobamos que el tamaño del archivo no supere
//el que hemos predefinido en $limite_tamano
if ($tamano > $limite_tamano ){
$cont_error += 1;
$error .= «Error» . $cont_error . «: El fichero seleccionado es demasiado grande. Su tamaño debe ser menor de » . $limite_tamano . «
«;
}
else{
//Añadimos el archivo a la ruta «uploads/nombrearchivo.extension»
$target_path = $target_path . basename($archivo);
if (move_uploaded_file($_FILES[‘video’][‘tmp_name’],$target_path )){
$status = «Archivo subido: «.$archivo.»«;
echo «
ENVIO CORRECTO
«;
echo «
Cliente: » . $cliente . «
«;
echo «
Título: » . $titulo . «
«;
echo «
Director: » . $director . «
«;
echo «
Destino: » . $target_path . «
«;
echo «Tamaño: » . $tamano . «
«;
echo «Tipo: » . $tipo . «
«;
} else {
$status = «Error al subir archivo»;
}
echo $status . «
«;
}
}
}
//Si existe algún error, los escribimos.
if ($error != «»){
echo «
» . $error . «
«;
}
}else{
//Si se ha accedido al script sin pasar por el formulario
//nos envía al formulario
echo «
Por favor, ingrese a esta página
desde el formulario: Formulario Uplaod
«;
}
[/php]
Como veis, el script cada vez que encuentra un error lo va acumulando en la variable error al igual que un contador para que al mostrar el error tambien muestre el número. Una vez termina la validación, si hay error nos mostrará los errores con su número correspondiente.
Os dejo las pantallas con el resultado del Upload de archivos en PHP:
Como siempre, dejo disponible el código en el siguiente enlace:
13 comentarios
hola veo que el tamaño permitido del video es de 20mb, como controlas que porcentaje del video ha subido, dado que tocaria esperar sin saber en cuanto va el upload del archivo.
Saudos y gracias por el script
Hola Carlos,
A ver si tengo tiempo y añado esa opción al formulario
Saludos.
Hola, muchas gracias por el script, me servirá para el proyecto de la universidad. Tenía algo hecho pero no me gustaba el diseño, con tu permiso creo que utilizaré el tuyo.
por supuesto, todo tuyo 🙂
Hola, muchas gracias por compartir tus conocimientos. Me ha servido de mucho el script y he aprendido muchas cosas.
Quiero hacerte una consulta, verás a parte de las comprobaciones que ya has puesto en el script, me gustaría poner una en la que se compruebe si existe el titulo de la película en la base de datos. La base de datos ya la tengo creada.
Saludos.
joan, para eso podrías utilizar una función que fuera validarTitPelicula pasándole dicho titulo para que lo busque en la base de datos.
En el caso de que tu base de datos fuera «peliculas», la llamada sería de la siguiente manera:
[php]
/*Tienes que tener en cuenta que titulo lo tienes que declarar en el formulario
que se enviará por POST como */
if(!validarTitPelicula($_POST[‘titulo’]))
echo «La película ya existe en la base de datos»;
else
echo «La pelicula NO existe en la base de datos;
[/php]
Y la función se quedaría de la siguiente manera:
[php]
function validarTitPelicula($titulo){
/*Tienes que declarar las variables $servidor, $usuario,$password y la base de datos que
como ejemplo te he puesto «peliculas» */
$servidor = «localhost»;
$usuario = «tuusuario»;
$password = «tupassword»;
$sdb = «peliculas»;
$ilink=mysql_connect($servidor,$usuario,$password) or die(mysql_error());
mysql_select_db($sdb,$ilink);
$consulta= «select titulo from peliculas where titulo = ‘$titulo'»;
$resultado=mysql_query($consulta,$ilink) or die (mysql_error());
if (mysql_num_rows($resultado)>0)
return false;
else
return true;
}
[/php]
Esto os puede servir para cualquier comprobación en la base de datos, tan solo tendréis que cambiar algunos parámetros como la variable que se pasa y la SELECT, entre otras cosas.
Espero te haya servido.
Un saludo.
Genial post!
Aunque soy algo novato con el tema y no me acaba de funcionar :(. Lo copio tal cual y me da el siguiente error:
Notice: Undefined index: cliente in C:\xampp\htdocs\validar.php on line 24
Notice: Undefined index: title in C:\xampp\htdocs\validar.php on line 25
Notice: Undefined index: director in C:\xampp\htdocs\validar.php on line 26
Notice: Undefined index: video in C:\xampp\htdocs\validar.php on line 27
Notice: Undefined index: video in C:\xampp\htdocs\validar.php on line 29
Notice: Undefined index: video in C:\xampp\htdocs\validar.php on line 30
Notice: Undefined index: video in C:\xampp\htdocs\validar.php on line 31
Notice: Undefined index: action in C:\xampp\htdocs\validar.php on line 42
Cómo lo soluciono? :S. Sé que es una tonteria pero no consigo hacerlo funcionar.
Saludos.
Muy util el ejemplo , a ver si me puedes hechar una mano en lo siquiente :
**como hago para modificar que los archivos a subir sean de tipo .mov .mpeg .avi .mp4
**y que a parte de eso cuando suba el archivo se cree un archivo txt con los datos tomados de los campos de textos y el nombre del archivo ?
Hola Bernardo,
En cuanto a los tipos de archivo que se puedan subir, te aconsejo una cosa. Ponte un display del valor del campo FILE cuando le pasas cada uno de esos tipos de archivo y así podras poner la validación segun lo que te salga.
Para crear un archivo de texto, mirate algún tutorial sobre FOPEN en PHP y demás.
Saludos.
muy buena la aplicacion pero me podrian ayudar a que el formulario tambien tenga o nos permita crear una carpeta en donde guardar el archivo
aldo, hay una función que te vendría bien investigar para esto, se trata de mkdir()
ola soy nuevo, disculapa pero como hago si me sale el mensaje «ingrese a esta pagina desde el formulario!» y al dar clic me muestra error… que no se supone q al declarar las varibles ya lo estas mandando ala carpeta?….
¿Cómo accedes al formulario?. Ese error te está pasando porque es posible que accedas a la página de resultados sin pasar por el formulario.
Fijate en esta validación:
[php]
if ($_POST[«action»] == «upload»){
[/php]
El error que te da, es porque la variable «action» del formulario no tiene el valor «upload»… Pon un display del action justo antes de ese IF para ver el valor que tiene.
Saludos.