Подтверждение PHP и Bootstrap 3 sendmail.php в сообщении об успешном или неудачном предупреждении начальной загрузки

avatar
Higguns
9 августа 2021 в 02:12
86
1
1

Я новичок в php и bootstrap, так что полегче со мной.

У меня есть шаблон HTML5, использующий Bootstrap 3.3.4, и я проделал большую работу по его настройке в соответствии с нашими потребностями. На html-странице есть контактная форма, которая использует проверку HTML5, и страница sendmail.php для отправки нам сообщения. Я немного почитал о php и сумел настроить его для успешной отправки при установке на наш сервер, однако прямо сейчас подтверждение перенаправляется на новую страницу после нажатия кнопки «Отправить». Я хотел бы изменить его так, чтобы эхо-предупреждение отображалось как предупреждение начальной загрузки (зеленое или красное) на той же странице html5 выше или ниже контактной формы, а не открывало новую страницу. В ходе поиска я нашел код предупреждения начальной загрузки (строки 3-5) для стороны html и добавил к моему коду ниже:

 <div class="contact-form default-form">
<form method="post" action="sendmail.php">
<div class="alert alert-success hide"></div>
<br style="clear:both"> 
<div class="alert alert-danger hide"></div>
<div class="form-group">
<input type="text" name="name" value="" placeholder="Name *" required></div>
<div class="form-group">
<input type="email" name="email" value="" placeholder="Email *" required></div>
<div class="form-group">
<input type="text" name="subject" value="" placeholder="Subject*" required></div>
<div class="form-group">
<textarea name="message" placeholder="Message *" required></textarea>
</div>
<button type="submit" class="theme-btn btn-style-two">Send Message</button>
</form>
</div>
</div>

но я не уверен, как заставить sendmail.php отправлять сообщения в html файл. Вот мой файл sendmail.php:

<?php
    //we need to get our variables first
    
    $email_to =   'sales@*****************.ca'; //the address to which the email will be sent
    $name     =   $_POST['name'];  
    $email    =   $_POST['email'];
    $subject  =   $_POST['subject'];
    $message  =   $_POST['message'];
    
    /*the $header variable is for the additional headers in the mail function,
     we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
     That way when we want to reply the email gmail(or yahoo or hotmail...) will know 
     who are we replying to. */
    $headers  = 'From: '. $name . '<' . $email . '>' . "\r\n";
    $headers .= "Reply-To: $email\r\n";
    
    if(mail($email_to, $subject, $message, $headers)){
        echo 'Thanks for your message. Someone will be in touch soon!'; // we are sending this text to the ajax request telling it that the mail is sent..      
    }else{
        echo 'Message failed to send. Please get in touch with us via another contact option or try again later.';// ... or this one to tell it that it wasn't sent    
    }
?>

Буду признателен за любую помощь!

Источник
Don't Panic
9 августа 2021 в 06:56
0

Вы можете просто отправить сообщение на ту же страницу, на которой находится форма. Поместите код из sendmail.php в файл, который показывает форму, и запустите его, только если установлен $_POST, т.е. если форма была опубликована. В качестве альтернативы, sendmail.php перенаправьте обратно в эту форму с некоторыми переменными $_SESSION или $_GET и используйте их на странице для отображения сообщения о состоянии. Если вы хотите пофантазировать, используя Javascript и AJAX, вы можете вообще избежать перезагрузки/обновления страницы - найдите «PHP для отправки электронной почты AJAX», и вы найдете много примеров здесь, на SO.

Don't Panic
9 августа 2021 в 06:58
1

Поиск по запросу «та же страница электронной почты PHP» выдает множество примеров всех этих подходов для начала работы.

Don't Panic
9 августа 2021 в 06:59
1

Отвечает ли это на ваш вопрос? Форма PHP — при отправке остается на той же странице

Ответы (1)

avatar
Nirav Bhut
9 августа 2021 в 07:33
1

Как вы сказали, вы отправляете сообщение в качестве ответа в Ajax. Вам нужно удалить action из тега <form> и заменить тип кнопки с submit на button. После этого вам нужно сделать 2 изменения, как показано ниже.

  1. Передать сообщение из файла PHP

    $response = array();
    if(mail($email_to, $subject, $message, $headers)){
        $response['status'] = 'success';
        $response['message'] = 'Thanks for your message. Someone will be in touch soon!';     
    }else{
        $response['status'] = 'error';
        $response['message'] = 'Message failed to send. Please get in touch with us via another contact option or try again later.';   
    }
    echo json_encode($response);
    exit();
    
  2. Показать сообщение, когда ajax получит ответ.

$.ajax({
    type: "POST",
    dataType: "json",
    url: "URL",
    data: "yourdata"
}).success(function (response) {
    if(response.status == 'success') {
        $('.alert-danger').html('');
        $('.alert-danger').addClass('hide');
        $('.alert-success').html('<label>'+ response.message + '</label>');         
        $('.alert-success').removeClass('hide');
    } else if(response.status == 'error') {
        $('.alert-success').html('');
        $('.alert-success').addClass('hide');
        $('.alert-danger').html('<label>'+ response.message + '</label>');          
        $('.alert-danger').removeClass('hide');
    }   
});
Higguns
14 августа 2021 в 21:26
0

куда идет код из 1. и 2.? В sendmail.php или на странице html?