Traductor

Enviando múltiples archivos

Usted puede crear un formulario que permita al usuario enviar mas de un archivo y tratarlos todos como elementos de una matriz.
Veamos el siguiente código:
<html>
  <body>
    <form action="multiplesArchivos.php" method="post" enctype="multipart/form-data">
      <input name="archivos[]" type="file">
      <input name="archivos[]" type="file"><br>
      <input name="archivos[]" type="file">
      <input name="archivos[]" type="file"><br>
      <input type="submit" value="Enviar">
    </form>
  </body>
</html>
Fíjese en el atributo name de los campos de archivo. Lo he resaltado en el código para llamar su atención. Todos los campos tienen el mismo valor  en el atributo name.
Esto, de acuerdo con lo que hemos visto es incorrecto, ya que el atributo name debe ser único para cada elemento, sin embargo esto es valido cuando se trata de páginas dinámicas, ya que cada campo se envía como un par nombre-valor al servidor.
  • Cabe resaltar que los nombres de los campos lleven corchetes, indicando que pertenece a una matriz.
  • Esto hará que los campos sean enviados al servidor como una matriz.
  • No se les ha atribuido un índice, de modo que el primer campo tomará el índice 0, el segundo el índice  1 y así sucesivamente.
Al cargar el código anterior verá:


Seleccione cuatro archivos de la carpeta que le proporcione anteriormente, de todas formas la puede descargar desde aquí:


Después de clic en enviar. En este momento los cuatro archivos son enviados, como una matriz, al script que aparece en el atributo actión del formulario, cuyo nombre es multiplesArchivos.php y cuyo código aparece a continuación:
<?php
// Se define el salto de línea.
                define ("salto","<br>\n");
/* Se contabiliza el número total de elementos de la matriz
"archivos", cuyo nombre se corresponde con los campos enviados
desde el formulario. Dado que, dicho formulario tiene cuatro
campos de archivo pertenecientes a la misma matriz, ese es el
número de elementos que esta contiene. Eso es independiente de
que en los campos se haya introducido un valor o no. Los campos
existen, aunque no tengan contenido.*/
                $totalDeArchivos=count($_FILES["archivos"]["tmp_name"]);
                echo ("El total de campos de archivo es de: ".$totalDeArchivos.salto);
                echo ("Sin embargo, puede que no todos contengan un archivo.".salto);
                echo (salto.salto);
/* Se recorren los cuatro campos, comprobando su propiedad
name. Si no existe quiere decir que el campo no tiene
contenido, es decir, que no se ha subido ningún archivo
en ese campo.*/
                echo ("A continuación se muestra la propiedad \"name\" (nombre)".salto);
                echo ("de cada uno de los archivos subidos.".salto);
                for ($contador=0; $contador<$totalDeArchivos; $contador++) {
                               echo ("<b>ARCHIVO $contador:</b> ");
                               if ($_FILES["archivos"]["name"][$contador]==""){
                                               echo ("NO EXISTE".salto);
                               } else {
                                               echo ("\"".$_FILES["archivos"]["name"][$contador]."\"".salto);
                               }
                }
?>
Veamos como funciona este código:
  • En primer lugar, se determina el número de elementos que componen la matriz de ficheros enviados al servidor.
  • Nosotros sabemos que son cuatro elementos, ya que en el formulario hay cuatro campos de archivo con el nombre de esa matriz.
  • Cuando se envían múltiples archivos al servidor usando el sistema de matriz, ésta se crea, siempre, con tantos elementos como campos contiene el formulario, con independencia de que el usuario haya seleccionado un archivo para todos campos,  para algunos o para ninguno.
  • Fíjese en la linea que cuenta los elementos de la matriz, reproducida a continuación.
$totalDeArchivos=count($_FILES["archivos"]["tmp_name"]);
  • En este caso la matriz $_FILES tiene tres índices.
    • El primero es el que corresponde al nombre de la matriz de campos, "archivos". Recuerde que así es como hemos llamado a los campos en el formulario. 
    • El segundo índice corresponde a las propiedades de cada uno de los elementos de la matriz "archivos".
    • El tercer índice es el número de elementos de la matriz "archivos" al que queremos referirnos.
  • Para efectuar la cuenta de elementos de la matriz "archivos"  hemos usado la propiedad tmp_name, pero podríamos haber usado cualquier otra. Esto no cambiaría el resultado.
  • A continuación, fíjese en que entramos en un bucle que itera tantas veces como elementos tenga la matriz "archivos".
  • En este caso son cuatro iteraciones.
  • Dentro del bucle vamos a determinar el valor de la propiedad name de cada uno de los elementos, es decir, de cada uno de los archivos enviados al servidor.
  • Si en alguno de los campos el usuario no ha seleccionado un archivo, esta propiedad no tendrá contenido. Para realizar esto, empleamos una condicional así:
if ($_FILES["archivos"]["name"][$contador]==""){
  • Ahora cargue el  código de formulario, y deje dos campos vacíos y vea como el código d PHP no muestra nada en esos campos.
No se pierda el siguiente capitulo en el cual veremos mas sobre subir archivos y su procesamiento para almacenarlos en alguna carpeta del directorio.

Recuerden Comentar Compartir y Darle 

Hasta la Próxima

Si te hemos ayudado : )
Te agradeceríamos que apoyaras este proyecto

0 comentarios:

Publicar un comentario