@inna97
начинающий верстальщик

Как ajax получить отрицательный ответ от php при отправке формы?

Нужно отправить форму с файлом.
Делаю проверку на объем файла в send.php.
Если делаю отправку формы только через send.php, то все проверки проходят.
А если отправляю форму через ajax, то приходит только успешный ответ от send.php в js.js.

Что и где нужно изменить, чтобы при отправке формы через ajax, приходило сообщение о превышение размера.

<form class="sc06row2__form" id="sc06row2__form" enctype="multipart/form-data"  method="post" >
                   
                    <input type="text" class="input name" name="name" id="name" placeholder="Имя" required></input> 
                    <div class="sc06row2__row">
                        <div class="sc06row2__titl">
                            Загрузите файл
                        </div>                                         
                            <input type="file" class="file" name="file_prava1" id="file" ></input>
                    </div>
                    <button type="submit" class="button">Отправить заявку</button>
                </form>


send.php
<?php
$name = $_POST['name'];
  $to = "***@gmail.com";
  $from = "***@***.ru";
  $subject = "Заявка с сайта АЙРИС TAXI";
  $message = "\nДанные кандидата: \n\n" .$name;
 
  $boundary = md5(date('r', time()));
  $filesize = '';
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "From: " . $from . "\r\n";
  $headers .= "Reply-To: " . $from . "\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  $message="
Content-Type: multipart/mixed; boundary=\"$boundary\"
 
--$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit
 
$message";
     if(is_uploaded_file($_FILES['file_prava1']['tmp_name'])) {
         $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file_prava1']['tmp_name'])));
         $filename = $_FILES['file_prava1']['name'];
         $filetype = $_FILES['file_prava1']['type'];
         $filesize = $_FILES['file_prava1']['size'];          
         $message.="
 
--$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$filename\"
 
$attachment";
     } 

   $message.="
--$boundary--";

    if ($filesizeall < 10000000) { 
        mail($to, $subject, $message, $headers);                
                echo 'Ваше сообщение отправлено, спасибо!';    
            }
              else {
                echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';   
            }
?>


js.js
$("#sc06row2__form").submit(function () { 
        var th = $(this);                
        $.ajax({
            type: "POST",
            url: "send.php", //Change
            data: th.serialize(),
        success: function () {    
            alert('Ваше сообщение отправлено, спасибо!'); 
        },
        error: function () {  
            alert('Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'); 
        }
       });
        return false;
    });
  • Вопрос задан
  • 357 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Добрый вечер.
В success проверяйте, что пришло, сообщение об успехе или наоборот.
$answer = [];
    if ($filesizeall < 10000000) { 
        mail($to, $subject, $message, $headers);                
               // echo 'Ваше сообщение отправлено, спасибо!';    
               $answer = ['type' => 'success', 'message' => 'Ваше сообщение отправлено, спасибо!']
               return json_encode($answer);
            }
              else {
               // echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';   
              $answer = ['type' => 'error', 'message' => 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'
              return json_encode($answer);
            }

success: function (data) {    
            var response = jQuery.parseJSON(data)
           if(response.type == 'success'){
               alert(response.message);
           }
           if(response.type == 'error'){
               alert(response.message)
           }
        },

Вот как-то так. Только на ошибки не проверял
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
PavelMonro
@PavelMonro
Прежде всего определите переменную $filesizeall, подсчитывайте вес файлов. Ну и дальше код Выше в помощь.
$filesizeall = array_sum($filesize);       
$maxFileSize = 100 * 1024 * 1024;  // 100 MB       
if ($filesizeall > $maxFileSize) {
// Если файлы весят больше 100 Мб
     
} else {
//Если меньше
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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