> Faqs > Cargar varios archivos con PHP y que no sea obligatoria la carga

Cargar varios archivos con PHP y que no sea obligatoria la carga

He creado un formulario para la carga de datos en la base de datos, incluidos dos campos de carga de archivos.

El código que tengo sube el archivo con PHP, pero quisiera que fuese cada archivo en su campo <input>. Y además que esta carga no fuese obligatoria, ya que puede que se tenga que cargar solo un archivo en un campo y en el otro no, o que el usuario no haya cargado un archivo en ninguno de los dos campos <input>.

El código HTML que tengo es el siguiente:

<form action="upload.php" method="post" enctype="multipart/form-data">
  <p>
    Selecciona el archivo 1:
    <br>
    <input type="file" name="file1">
  </p>
  <p>
    Selecciona el archivo 2:
    <br>
    <input type="file" name="file2">
  </p>
  <p>
    <button>Enviar</button>
  </p>
</form>

Como se puede ver, son dos campos input separados. Lo que quiero hacer con PHP es detectar cuándo se está enviando un archivo en cada uno de sus campos. Validando que realmente existe el archivo, entonces proceder a la carga del archivo con PHP.

Si se detecta que no se ha enviado ningún archivo, entonces no se debe cargar nada ni por tanto actualizar mis registros actuales.

Respuestas

Para validar desde PHP si están o no están enviando un archivo en un campo file puedes simplemente preguntar si existe un nombre de archivo en el array $_FILES.

Por ejemplo, si tu campo input se llama (atributo name) "file1", en el array de $_FILES lo tendrás en $_FILES['file1'] y el nombre del archivo, tal como está en el disco duro del usuario lo tendrás en $_FILES['file1']['name'].

La evaluación puede ser algo como if($_FILES['file1']['name']).

Un código posible para hacer lo que deseas, cargar en tu servidor los archivos únicamente cuando han sido seleccionados por el usuario en los correspondientes campos <input> de formulario, podría ser el siguiente:

if($_FILES['file1']['tmp_name']) {
  // Se ha enviado el archivo file1
  // Aquí habría que validar el arhivo y si valida, entonces hacer el upload con PHP
  if (move_uploaded_file($_FILES['file1']['tmp_name'],  $_FILES['file1']['name'])){
    echo "Upload correcto";
  }else{
      echo "Upload ha fallado";
  }
} else {
  echo 'No se recibió archivo 1';
}
if($_FILES['file2']['name']) {
  if (move_uploaded_file($_FILES['file2']['tmp_name'],  $_FILES['file2']['name'])){
    echo "Upload correcto";
  }else{
      echo "Upload ha fallado";
  }
} else {
  echo 'No se recibió archivo 2';
}
Miguel Angel
3295 146 215 17
hola como estan, siguiendo con el hilo, yo tenia otra duda. Veréis yo quisiera guardar los archivos subidos en diferentes carpetas según la extensión, o también me valdría asignar un indice a cada archivo y guardarlos en una única carpeta.