Me estoy golpeando la cabeza contra las paredes con esta cosa durante 4 horas.
Creé una entrada (archivos múltiples) como se muestra a continuación, que no está dentro de un formulario.
<label for="adaugaFisiere" class="btn btn-success tip" title="Poți adăuga fișiere JPG,PDF,DOC,XLS" data-original-title="Adauga imagini"><span>Adaugă fișiere</span></label> <input type="file" multiple="" id="adaugaFisiere" name="docImgs[]" class="filestyle invisible" required="" accept="image/*,.pdf,.doc,.docx,.xls,.xlsx" onChange="updateList(<?= $nextNrDoc ?>)">A continuación, tengo el siguiente código JavaScript, que sube los archivos a un archivo PHP
function updateList(nrDoc){ var inputFiles = $('#adaugaFisiere').prop('files'); var formData = new FormData(); formData.append('listFiles', inputFiles); $.ajax({ url: 'exec/files-upload.php', type: 'POST', cache: false, data: formData, contentType: false, processData: false, //Ajax events success: function(html){ $('#fileList').html(html); }, fail: function(res){ alert('Eroare upload'); } });}
Y finalmente, el archivo PHP
var_dump($_POST); $name_array = $_FILES['listFiles']['name']; $tmp_name_array = $_FILES['listFiles']['tmp_name']; // Number of files $count_tmp_name_array = count($tmp_name_array);El archivo PHP es más grande, pero no es importante porque aparece un error en la parte superior del archivo.
El dump_var devuelve esto:
array(1) { ["listFiles"]=> string(17) "[object FileList]" }Y justo después viene el error:
Warning: Undefined array key "listFiles" in D:\xampp\htdocs\cityadmin\exec\files-upload.php on line 4 Warning: Trying to access array offset on value of type null in D:\xampp\htdocs\cityadmin\exec\files-upload.php on line 4 Warning: Undefined array key "listFiles" in D:\xampp\htdocs\cityadmin\exec\files-upload.php on line 5 Warning: Trying to access array offset on value of type null in D:\xampp\htdocs\cityadmin\exec\files-upload.php on line 5Corrí en círculos pero no pude entenderlo. ¿Por qué recibo este error si dump_var muestra los datos que llegan al archivo PHP? Alguien, alguna idea?
Por favor, no voten sobre esto, acabo de publicar para aquellos que están en la misma situación que yo.
Obtuve mi respuesta de este hilo.
El punto es que cuando tiene varios archivos de una entrada, debe recorrer cada uno y agregarlo a formData como una matriz. Después de eso, puede recuperarlo en PHP como $_FILES[][] . Es posible agregar otros datos $_POST[] a formData, con formData.append() y obtener una matriz $_POST[] y $_FILES[][] en el controlador de PHP.
Entonces, en lugar de hacer esto formData.append("fileList", fileList); , he hecho esto
for (let i = 0; i < fileList.length; i++) { formData.append("fileList[]", fileList[i]); } formData.append('nextId', nrDoc); formData.append('post', 'files-upload');Después de ese cambio, pude acceder a los archivos en el controlador de PHP y mis otras variables enviadas.
Solía funcionar hace algún tiempo, pero he estado ocupado con otro tipo de proyectos y no me di cuenta de que definitivamente algo había cambiado en la forma en que AJAX procesa las solicitudes.
Ahora, todo funciona según lo diseñado, sin advertencias ni errores. ¡Espero que alguien más encuentre una solución en esta publicación!