Помогите пожалуйста!
Создаю форму отправки на почту и никак не могу добавить условие чтобы можно было прикреплять несколько файлов разного типа. Получается добавить несколько файлов в интерфейсе, но на почту приходит только 1 файл.
Я также не понимаю, что надо добавить в саму папку phpmailer, вроде надо добавить autoload.php, но я не понимаю как его добавлять
Только пожалуйста не отправляйте в документацию PHPMailer, я пыталась там понять
<form method="post" action="#" id="form" class="form__body" enctype="multipart/form-data">
..............
<div class="form__item">
<div class="form__label">Прикрепить файл</div>
<div class="file">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input class="file__input" id="formFile" name="file[]" type="file" multiple="multiple">
<div id="formPreview" class="file__preview"></div>
</div>
</div>
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$message = '';
if (array_key_exists('file', $_FILES)) {
$mail = new PHPMailer(true);
$mail ->Charset = 'UTF-8';
$mail ->setLanguage('ru', 'phpmailer/language/');
$mail ->IsHTML(true);
// от кого письмо
$mail->setFrom('info@fls.guru', '');
// кому идет письмо
$mail->addAddress('cchgchh@yandex.ru');
// тема письмо
$mail->Subject = 'Новая заявка Cybernext.one';
// тело письмо
$body = '<h1>Заявка: </h1>';
if(!empty($_POST['name'])){
$body .='<p><strong>Имя: </strong>'.$_POST['name'].'</p>';
}
if(!empty($_POST['surname'])){
$body .='<p><strong>Фамилия: </strong>'.$_POST['surname'].'</p>';
}
if(!empty($_POST['email'])){
$body .='<p><strong>E-mail: </strong>'.$_POST['email'].'</p>';
}
if(!empty($_POST['date'])){
$body .='<p><strong>Дедлайн: </strong>'.$_POST['date'].'</p>';
}
if(!empty($_POST['options'])){
$body .= '<p><strong>Кто вы?: </strong></p>';
foreach($_POST['options'] as $option){
$body .= '<p>'.$option.'</p>';
}
}
if(!empty($_POST['message'])){
$body .='<p><strong>Иное: </strong>'.$_POST['message'].'</p>';
}
// Attach multiple files one by one
for ($ct = 0, $ctMax = count($_FILES['file']['tmp_name']); $ct < $ctMax; $ct++) {
// Извлечение расширения из предоставленного filename
$ext = PHPMailer::mb_pathinfo($_FILES['file']['name'][$ct], PATHINFO_EXTENSION);
// Определение безопасного местоположения для перемещения загруженного файла с сохранением расширения.
$uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['file']['name'][$ct])) . '.' . $ext;
$filename = $_FILES['file']['name'][$ct];
if (move_uploaded_file($_FILES['file']['tmp_name'][$ct], $uploadfile)) {
if (!$mail->addAttachment($uploadfile, $filename)) {
$msg .= 'Failed to attach file ' . $filename;
}
} else {
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
$mail->Body = $body;
try {
$mail->send();
$message = 'данные отправлены';
} catch (Exception $e) {
$message = 'ошибка: ' . $mail->ErrorInfo;
}
$response = ['message'=> $message];
header('Content-type: application/json');
echo json_encode($response);
}
?>
"use strict"
document.addEventListener('DOMContentLoaded', function () {
const form = document.getElementById('form');
form.addEventListener('submit', formSend);
async function formSend(e) {
e.preventDefault();
let error = formValidate(form);
let formData = new FormData(form);
for (let i = 0; i < formFile.files.length; i++) {
formData.append('files[]', formFile.files[i]);
}
if (error === 0) {
form.classList.add('_sending');
let response = await fetch('sendmail.php', {
method: 'POST',
body: formData
});
if (response.ok) {
let result = await response.json();
alert(result.message);
formPreview.innerHTML = '';
form.reset();
form.classList.remove('_sending');
} else {
alert('Ошибка');
form.classList.remove('_sending');
}
} else {
alert("Заполните все поля");
}
}
function formValidate(form) {
let error = 0;
let formReq = document.querySelectorAll('._req');
for (let index = 0; index < formReq.length; index++) {
const input = formReq[index];
formRemoveError(input);
if (input.classList.contains('_email')) {
if (emailTest(input)) {
formAddError(input);
error++;
}
} else if (input.getAttribute("type") === "checkbox" && input.checked === false) {
formAddError(input);
error++;
} else {
if (input.value === '') {
formAddError(input);
error++;
}
}
}
return error++;
}
function formAddError(input) {
input.parentElement.classList.add('_error');
input.classList.add('_error')
}
function formRemoveError(input) {
input.parentElement.classList.remove('_error');
input.classList.remove('_error')
}
// email
function emailTest(input) {
return !/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{1,5}|[0-9]{1,3})(\]?)$/.test(input.value);
}
const formFile = document.getElementById('formFile');
const formPreview = document.getElementById('formPreview');
if (formFile && formPreview) {
formFile.addEventListener('change', () => {
uploadFiles(formFile.files);
});
} else {
console.error('Элементы с id "formFile" или "formPreview" не найдены в DOM.');
}
function uploadFiles(files) {
const formData = new FormData(form); // Создаем объект FormData здесь
for (let i = 0; i < files.length; i++) {
const file = files[i];
var reader = new FileReader();
reader.onload = function (e) {
const fileInfo = document.createElement('div');
fileInfo.classList.add('file__info');
const fileName = document.createElement('p');
fileName.textContent = `Файл ${file.name} загружен`;
const deleteButton = document.createElement('button');
deleteButton.textContent = 'Удалить';
deleteButton.classList.add('file__delete');
deleteButton.addEventListener('click', () => {
fileInfo.remove();
formData.delete('files[]', file);
});
fileInfo.appendChild(fileName);
fileInfo.appendChild(deleteButton);
formPreview.appendChild(fileInfo);
};
reader.onerror = function (e) {
alert('ошибка при загрузке файла');
};
reader.readAsDataURL(file);
}
}
});