Pedir presupuesto

Upload de archivos en PHP 2/2

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.

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.

Upload de archivos en PHP

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:

Upload de archivos en PHP

Upload de archivos en PHP

Como siempre, dejo disponible el código en el siguiente enlace:

Upload archivos

¿Te ha gustado?, Comparte!!

13 comentarios

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 ?

    1. 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.

  6. 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

  7. 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?….

    1. ¿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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

¡Pide tu presupuesto!

Completa los campos para poder enviarte un presupuesto

Todos y tu presupuesto son a medida y totalmente personalizados, entendemos que dos proyectos online no pueden ser iguales y que cada cliente tiene unos objetivos y necesidades muy diferentes, es por eso que para elaborar un presupuesto, necesitamos saber de ti, tu proyecto y objetivos.

Los campos marcados con (*) son obligatorios.

La comunicación enviada quedará incorporada a un fichero del que es responsable COLORDEU. Esta comunicación se utilizará exclusivamente para tratar sus datos para atender su solicitud, siempre de acuerdo al Reglamento (UE) 2016/679 (RGPD), la Ley Orgánica 15/1999 (LOPD) y el Real Decreto 1720/2007 de desarrollo de la LOPD), sobre protección de datos. Sus datos no se comunicarán a terceros, excepto por obligación legal, y se mantendrán mientras no solicite su cancelación. En cualquier momento usted puede ejercer los derechos de acceso, rectificación, portabilidad y oposición, o si procede, a la limitación y/o cancelación del tratamiento, comunicándolo por escrito, indicando sus datos personales mediante un email a hola@colordeu.es