@uzi_no_uzi

Как правильно отправить форму с файлом?

Имеется вот такая форма. В ней идет отправка файла.

<div class="modal-body">
                    <div class="modal_wrap">
                        <img src="<?php bloginfo('template_directory'); ?>/assets/img/modal.png" alt="">
                        <h2 class="modal_wrap__title">
                            Оставьте заявку
                        </h2>
                        <div class="modal_brd"></div>
                        <p class="modal_wrap__text">
                            Оставьте заявку с контактными — данными и наши специалисты свяжутся с вами в ближайшее время.
                        </p>
                        <form action="" class="modal_form" enctype="multipart/form-data">
                            <input class="modal_input modal_input--name" type="text" placeholder="Введите имя">
                            <input class="modal_input modal_input--phone" type="text" placeholder="Введите телефон">
                            <input class="modal_input modal_input--mail" type="text" placeholder="Введите e-mail">
                            <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
                            <input name="userfile" type="file" class="modal_input--userfile">
                            <textarea class="modal_textarea" name="" id="" cols="30" rows="10" placeholder="Текст заявки"></textarea>
                            <button type="button" class="modal_btn">отправить заявку</button>
                        </form>
                    </div>
                </div>


Далее данная форма обрабатывается этим скриптом:

$(document).ready(function() {
      $(".modal_btn").click(function(event) {
          event.preventDefault();
          var phone = $(".modal_input--phone").val();
          var name = $(".modal_input--name").val();
          var mail = $(".modal_input--mail").val()
          var ms = $(".modal_textarea").val();
          var userfile = $(".modal_input--userfile").val();
          
          if (name.length < 1) {       
              alert('Введите корректное имя')
              return false;
          } else if (!phone.match(/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/)) {
              alert('Введите корректный номер телефона')
              return false;
          } else if (ms.length < 5) {
            alert('Сообщение должно содержать от 5-ти символов')
              return false;
          } else if (!mail.match(/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\.)+[a-z]{2,6}$/)) {
                alert('Введите корректный e-mail')
                return false;
          } else {
              $.post("./wp-content/themes/uslugi/send_t.php", {
                  ms: ms,
                  name: name,
                  phone: phone,
                  mail: mail,
                  userfile: userfile,
              }, res);
          }

          console.log(userfile);
      });

      function res(data) {
          if (data === "+") {
            alert('Заявка успешно отправлена!');
          } else {
            alert('11');
          }
      }


Тут в userfile находится путь такого вида: 5db6ade3e7ac8564177771.png

В конце данные отправляются этим скриптом на почту (Все отправляется, кроме файла + ошибку выбивает в ответе):

<?php
require_once __DIR__.'/vendor/autoload.php';


use PHPMailer\PHPMailer\PHPMailer;



if(strlen($_POST['ms'])>4 and strlen($_POST['name'])>1 and strlen($_POST['phone'])>4){
error_reporting(E_ALL);
ini_set("display_errors", 1);

    function send_email($to,$theme,$message){   
        $mail = new PHPMailer(true); // Passing `true` enables exceptions
        $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));
        try {
            //Server settings
            $mail->SMTPDebug = 0; // Enable verbose debug output
            $mail->isSMTP(); // Set mailer to use SMTP
            $mail->CharSet = 'UTF-8';
            $mail->Host = 'smtp.mail.ru'; // Specify main and backup SMTP servers
            $mail->SMTPAuth = true; // Enable SMTP authentication
            $mail->Username = '***.***.01@***.ru'; // SMTP username
            $mail->Password = '******'; // SMTP password
            $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
            $mail->Port = 587; // TCP port to connect to
            $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );  
            //Recipients
            $mail->setFrom('****', '***');
            $mail->addAddress('***, '****'); // Add a recipient
            
            $mail->isHTML(true); // Set email format to HTML
            $mail->Subject = 'Customer order Corplex';
            $mail->Body = 'Name: '.$_POST['name'].'<br /> Phone: '.$_POST['phone'].'<br /> Message: '.$_POST['ms'].'<br /> E-mail: '.$_POST['mail'];
            $mail->addAttachment($uploadfile, $_FILES['userfile']['name']);
            $mail->AltBody = 'Application';
            $mail->send();
            echo '+';
        } catch (Exception $e) {
            echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
        }
                    

        
    }
    
    if(send_email('**.**.**.**@****.*','Заказ', 'Имя:'.$_POST['name'].'. <br >Cообщение: '.$_POST['ms'].'. <br> Почта: '.$_POST['mail'])){
        echo $_FILES['userfile']['tmp'];
        echo "+";
    }
}
?>

Вот сама ошибка:
5db6ae4b8f0bc083071243.png
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
alams_stoyne
@alams_stoyne
Full Stack Developer - #PHP #CSS #JS #DB
Вы не отправляете сам файл вот и не работает!

$(document).ready(function() {
      $(".modal_btn").click(function(event) {
          event.preventDefault();
          var phone = $(".modal_input--phone").val();
          var name = $(".modal_input--name").val();
          var mail = $(".modal_input--mail").val()
          var ms = $(".modal_textarea").val();
          var userfile = $(".modal_input--userfile").val();
          
          if (name.length < 1) {       
              alert('Введите корректное имя')
              return false;
          } else if (!phone.match(/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/)) {
              alert('Введите корректный номер телефона')
              return false;
          } else if (ms.length < 5) {
            alert('Сообщение должно содержать от 5-ти символов')
              return false;
          } else if (!mail.match(/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\.)+[a-z]{2,6}$/)) {
                alert('Введите корректный e-mail')
                return false;
          } else {
            var fd = new FormData();
            fd.append('ms', ms);
            fd.append('name', name);
            fd.append('phone', phone);
            fd.append('mail', mail);
            fd.append('userfile', $(".modal_input--userfile")[0].files[0]);
            $.ajax({
                type: 'POST',
                url: './wp-content/themes/uslugi/send_t.php',
                data: fd,
                processData: false,
                contentType: false,
                dataType: "json",
                success: function(data) {
                    alert('Заявка успешно отправлена!');
                },
                error: function(data) {
                    console.log(data);
                }
            });
          }
      });
});
Ответ написан
ns174ru
@ns174ru
https://ns174.ru
номера строк написаны с ошибками, тостеротчанам их не видно)
это даже не ошибки, а нотисы.
скорее всего путь к файлу указан криво. это наиболее частая ошибка
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы