Я понимаю, что это HTML является лишь частью вашей формы, верно? На вопрос, что я не вижу никаких элементов для ввода email
telefono
cap
и нескольких других.
Другое дело, что это:
<label class="control-label" name="userfile" enctype="multipart/form-data">
обычно неверно - я имею в виду: атрибут enctype
здесь не имеет смысла, на самом деле он должен go элементу <form>
(так как вы говорите, что ваша форма отправляет файлы, я предполагаю, что на самом деле это работает, только проблема с файлами - это проблема).
Основная проблема, с которой вы столкнулись, заключается в том, как вы обрабатываете загруженный файл:
$uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));
Если вы попробуете этот код (для обучения):
<?php
if (isset($_FILES['my-file'])) {
var_dump($_FILES['my-file']);
var_dump(tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['my-file']['name'])));
}
?>
<!doctype html>
<html>
<head>
<title>sample</title>
</head>
<body>
<form action="1.php" enctype="multipart/form-data" method="post">
<input type='file' name='my-file'>
<input type="submit">
</form>
</body>
</html>
вы заметите (после загрузка файла) примерно так:
array(5) {
["name"]=>
string(21) "flight_to_hamburg.pdf"
["type"]=>
string(15) "application/pdf"
["tmp_name"]=>
string(14) "/tmp/phpS2dWIg"
["error"]=>
int(0)
["size"]=>
int(76044)
}
string(75) "/tmp/ecb918e45ff9059a9ad1b7b52c5c0d24575f8ac19474f2f13c908801eafaa48bLMlIeG"
, который ясно показывает, что sha256
- это не то, что PHP использует для создания имен временных файлов.
С PHP Mailer позволяет указывать на файл и отправлять его под другим именем, тогда в моем примере это было бы просто:
$path = $_FILES['my-file']['tmp_name']; //actual path to the file
$name = $_FILES['my-file']['name']; //actual name of the file
$mail->addAttachment($path, $name);
Если вы хотите сохранить файл локально после отправки, обязательно также вызовите move_uploaded_file
как если нет, то файл будет потерян.
* 103 0 * Так что в вашем примере это будет:
$path = $_FILES['userfile']['tmp_name']; //actual path to the file
$name = $_FILES['userfile']['name']; //actual name of the file
$mail->addAttachment($path, $name);
, если вы хотите HA SH имя файла, по какой-то причине сделайте это с переменной $name
; $path
должен привести к существующему файлу.
Также, если у вас нет JavaScript, который создает FormData
при отправке и отправке файла, используя только стандартную обработку форм в браузере, тогда ОБЯЗАТЕЛЬНО измените ОДИН из ваших:
<input type="file" required>
до
<input type="file" name="userfile" required>
имя должно совпадать: таким образом PHP определяет, какие данные были отправлены из каких полей HTML формы.