как без формы с инпут файл отправит файл?

191
08 сентября 2018, 19:50
<label class="label btn" for="file"> Загрузить<input enctype="multipart/form-data" class="answer5 file" name="answer5" id="file" type="file" placeholder="Загрузить" value="Загрузить"></label>

JS

var file;

$(".fail").onchange(function(){
    file = $('.file')[0].files[0];
    )

    function endtest() {
        const formData = new FormData;
        formData.append("ebody", `<h3>Телефон:&nbsp;${tel}</h3><h3>Вопрос0:&nbsp;${answer1}</h3><h3>Вопрос1:&nbsp;${answer2}</h3><h3>Вопрос2:&nbsp;${answer3}</h3><h3>Вопрос3:&nbsp;${answer4}</h3><h3>Вопрос4:&nbsp;${answer5}</h3><h3>Вопрос6:&nbsp;${answer6}</h3>`);
        formData.append("file", file);
        $.ajax({
            type: "POST"
            , url: "test.php"
            , data: formData
            , processData: false
            , cache: false
            , contentType: false
            , dataType: "json"
        }).done(function () {
            $("#message-send-ok").addClass("active");
        }).fail(function (xhr, textStatus, errorThrown) {
            alert(xhr.responseText);
        });
    }

PHP

<?php 
    $from = "<Фаворит>";

    if (isset($_POST['ebody'])) {$ebody = $_POST['ebody'];} 

    $mailTo ="g@mail.ru";
    $file = $_FILES['file']['name'];
     // от кого
    $subject = "Прошел тест"; // тема письма
    $message = $ebody;  // текст письма
    $r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
    echo ($r)?'':'';

    function sendMailAttachment($mailTo, $from, $subject, $message, $file = false){
        $separator = "---"; // разделитель в письме
        // Заголовки для письма
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "From: $from\nReply-To: $from\n"; // задаем от кого письмо
        $headers .= "Content-Type: multipart/mixed; boundary=\"$separator\""; // в заголовке указываем разделитель
        // если письмо с вложением
        if($file){
            $bodyMail = "--$separator\n"; // начало тела письма, выводим разделитель
            $bodyMail .= "Content-type:text/html; charset = utf-8\r\nFrom:$email"; // кодировка письма
            $bodyMail .= "Content-Transfer-Encoding: quoted-printable"; // задаем конвертацию письма
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n"; // задаем название файла
            $bodyMail .= $message."\n"; // добавляем текст письма
            $bodyMail .= "--$separator\n";
            $fileRead = fopen($file, "r"); // открываем файл
            $contentFile = fread($fileRead, filesize($file)); // считываем его до конца
            fclose($fileRead); // закрываем файл
            $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n"; 
            $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";
            $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл
            $bodyMail .= "--".$separator ."--\n";
        // письмо без вложения
        }else{
            $bodyMail = $message;
        }
        $result = mail($mailTo, $subject, $bodyMail, $headers); // отправка письма
        return $result;
    }
?>
Answer 1
        formData.append("file", $('.file')[0].files[0]);

var file - локальная переменная внутри обработчика change, ее не видно внутри функции endtest.

READ ALSO
Как запретить ходить по каталогам на сайте

Как запретить ходить по каталогам на сайте

Всех приветствую,есть сайт как запретить пользователям ходить по каталогам ну например открыл сайт попал на indexphp и допустим он ввел в адресную...

170
PHP алгоритм RSA в разных библиотеках

PHP алгоритм RSA в разных библиотеках

взял две библиотеки для шифрования в RSA: phpseclib/phpseclib liamylian/x-rsa

167
redbeanPHP чистый mysql запрос

redbeanPHP чистый mysql запрос

На моём бесплатном хостинге не работает та часть PedBean php что отвечает за внесения и изменения данных, по этому эту часть хочу перевести на mysql запросынашёл...

206
Как сделать выборку товаров c фильтрацией по связных таблицах при связи многие ко многим?

Как сделать выборку товаров c фильтрацией по связных таблицах при связи многие ко многим?

Есть таблица с товарами goodsОна связана с таблицей categories (многие ко многим), также с таблицей goods_filter_value (многие ко многим)

191