kn1ght_t
@kn1ght_t

Как на стороне сервера принять файлы, отправленные аяксом через formData?

дана форма с инпутом с атрибутом multiple:
<form>
          <input  type="file" name="file" multiple="multiple">
</form>


отправляю ее аяксом через formData:
$('form').submit(function(){
		$.ajax({
			type: "POST",
			url: "phpmailer/mail.php",
			data: new FormData( this ),
			processData: false,
			contentType: false,
			success: function() {

			}
	return false;
});


на стороне сервера использую библиотеку phpmailer (таким образом работает только для одного или первого файла, отправленного через форму):
<?php
require_once('class.phpmailer.php');

$email1 = new PHPMailer();
$email1->CharSet = 'UTF-8';
$email1->IsHTML(true);
$email1->From      = 'some_mail@mail.ru';
$email1->FromName  = 'Имя проекта';
$email1->Subject   = "Тема (Имя проекта): ".$form_name;
$email1->Body      = $bodytext1;
$email1->AddAddress( 'send-to-email@mail.ru' );

if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK) {
	$email1->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
}
?>


как сделать так, чтобы сервер принимал сразу несколько файлов с одного инпута?
такой вариант не работает:
foreach ($_FILES['file'] as $file) {
	if (isset($file) && $file['error'] == UPLOAD_ERR_OK) {
		$email1->AddAttachment($file['tmp_name'], $file['name']);
	}
}
  • Вопрос задан
  • 563 просмотра
Решения вопроса 2
riky
@riky
Laravel
print_r($_FILES);

и все станет ясно
Ответ написан
kn1ght_t
@kn1ght_t Автор вопроса
в итоге так получилось вот так

но надо, чтобы $files = $_FILES['file'] состоял из массивов

поэтому
<input  type="file" name="file[]" multiple="multiple">


$files = $_FILES['file'];

file_put_contents('logs.txt', print_r($files, true));

if (isset($files)) {
	for ($i = 0; $i < count($files); $i++) {
		if ($files['error'][$i] == UPLOAD_ERR_OK) {
			$email1 -> AddAttachment($files['tmp_name'][$i], $files['name'][$i]);
		}
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы