Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   форма обратной связи (https://javascript.ru/forum/misc/64502-forma-obratnojj-svyazi.html)

maxg5 16.08.2016 10:46

форма обратной связи
 
Всем доброго времени суток.
Нашел на просторах интернета AJAX форму обратной связи. Но она работает не корректно. Все время пишет что сообщение не отправлено.
Подозреваю что проблема в JS скрипте. Помогите разобраться.
jQuery(document).ready(function($){
 
    //в этой функции отслеживается изменение чекбокса "я не робот"
    $(document).on('change', '.fofm input:checkbox', function() {
        if($(this).is(':checked')){
            $(".fofm input[type=submit]").removeAttr('disabled');
            $('.fofm input[type=hidden].valTrFal').val('valTrFal_true');
        }
        else {
            $(".fofm input[type=submit]").attr('disabled','disabled');
            $('.fofm input[type=hidden].valTrFal').val('valTrFal_disabled');
        }
    });
 
    //закрытие модального окна
    $('.close_modal, .overlay').click(function (){
        $('.popup, .popup2, .overlay').css({'opacity':'0', 'visibility':'hidden'});
        $('.popup > .fofm textarea').val('');
        //сброс всех полей формы обраной связи
        $(':input','.fofm').not(':button, :submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected');
        $(".fofm input[type=submit]").attr('disabled','disabled');
    });
 
    //показ модального окна
    $('.open_modal').click(function (e){
        e.preventDefault();
        $('.popup, .overlay').css({'opacity':'1', 'visibility':'visible'});
    });
 
    //аякс форма обратной связи
    //проверяет какой ответ был получен
    //и в зависимости от ответа
    //выводит информацию о статусе
    //отправки письма
    $(".fofm").submit(function() {
        var str = $(this).serialize();
        $.ajax({
            type: "POST",
            url: "php/contact.php",
            data: str,
            success: function(msg) {
                if(msg == 'ok') {
                    $('.popup2, .overlay').css('opacity','1');
                    $('.popup2, .overlay').css('visibility','visible');
                    $('.popup').css({'opacity':'0','visibility':'hidden'});
                }
                else {
                    $('.popup2 .window').html('<h5>Ошибка</h5><p>Сообщение не отправлено, убедитесь в правильности заполнение полей</p>');
                    $('.popup2, .overlay').css('opacity','1');
                    $('.popup2, .overlay').css('visibility','visible');
                    $('.popup').css({'opacity':'0','visibility':'hidden'});
                }
            }
        });
        return false;
    });
 
});


<div class="overlay"></div>
    <div class="popup">
        <div class="close_modal">x</div>
        <form class="fofm" action="">
            <h5>Форма обратной связи</h5>
            <input type="text" required="" placeholder="Имя" name="txtname">
            <input type="email" placeholder="Email" name="txtemail">
            <input type="tel" pattern="^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$" required="" placeholder="Телефон" name="txtphone">
            <textarea name="txtmessage" placeholder="Описание" rows="10"></textarea>
            <label><input type="checkbox">Я не робот</label>
            <input type="hidden" name="valTrFal" class="valTrFal" value="valTrFal_disabled">
            <input type="submit" class="button" value="Отправить" disabled="disabled" name="btnsend">
        </form>
    </div>
 
    <div class="popup2">
    <div class="close_modal">x</div>
        <div class="window">
            <div class="insText">
                <h5>запрос отправлен</h5>
                <p><strong>Ваш запрос отправлен.</strong>Наш менеджер свяжется с вами в ближайшее время!</p>
                <hr>
                <p>Предлагаем подробную информацию по продукции:</p>
            </div>
        </div>
    </div>

Spass 16.08.2016 11:32

success: function(msg) {
                if(msg == 'ok') {
                    $('.popup2, .overlay').css('opacity','1');
                    $('.popup2, .overlay').css('visibility','visible');
                    $('.popup').css({'opacity':'0','visibility':'hidden'});
                }
                else {
                    $('.popup2 .window').html('<h5>Ошибка</h5><p>Сообщение не отправлено, убедитесь в правильности заполнение полей</p>');
                    $('.popup2, .overlay').css('opacity','1');
                    $('.popup2, .overlay').css('visibility','visible');
                    $('.popup').css({'opacity':'0','visibility':'hidden'});
                }
            }


Очевидно что на сервере нужно возвращать 'ok', так что ищи проблему там :)

maxg5 16.08.2016 11:50

Spass,
Это понятно что на сервере нужно возвращать 'ok'.
Вот только не понятно где именно ошибка в скрипте.

maxg5 16.08.2016 12:34

<?php
//проверяем значения полученые при проверке скриптом формы
if (trim($_POST['valTrFal'])!='valTrFal_true') {
	echo 'fasle';
}
else {

		$txtname = trim($_POST['txtname']);

		$txtNameValue = trim($_POST['name_class_value']);

		$txtemail = trim($_POST['txtemail']);

		$txtphone = trim($_POST['txtphone']);

		$txtmessage = trim($_POST['txtmessage']);

		// от кого
		$fromMail = 'zakaz@mosmsater.ru';
		$fromName = 'NameSendler';

		// Сюда введите Ваш email
		$emailTo = 'user5@user.ru;

		$subject = 'Форма обратной связи';
		$subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
		$headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
		$headers .= "From: ". $fromName ." <". $fromMail ."> \r\n";

		// тело письма
		$body = "Получено письмо с сайта МойСайт.рф\n\nИмя: $txtname\nТелефон: $txtphone\ne-mail: $txtemail \nСообщение: $txtmessage";
		$mail = mail($emailTo, $subject, $body, $headers, '-f'. $fromMail );


		echo 'ok';
}
?>

maxg5 16.08.2016 13:04

Разобрался.
Была ошибка синтаксиса в contact.php в 23 строке.

laimas 16.08.2016 13:04

Цитата:

Сообщение от maxg5
//проверяем значения полученые при проверке скриптом формы
if (trim($_POST['valTrFal'])!='valTrFal_true') {
echo 'fasle';
}
else {
$txtname = trim($_POST['txtname']);
$txtNameValue = trim($_POST['name_class_value']);
$txtemail = trim($_POST['txtemail']);
$txtphone = trim($_POST['txtphone']);
$txtmessage = trim($_POST['txtmessage']);

И где здесь проверка?

PS. И уберите ошибку в РНР коде - строка 23 не закрыта кавычкой

warren buffet 16.08.2016 13:33

maxg5, тебе говорят убери отправку письма на введенный в форме адрес. Иначе с твой формы начнут хреначить спам на весь рунет.

warren buffet 16.08.2016 13:35

Цитата:

if (trim($_POST['valTrFal'])!='valTrFal_true') {
echo 'fasle';
Элементарного не знает. Если нет данных в посте, то показывый ту же самую форму вновь.

if (trim($_POST['valTrFal'])=='valTrFal_true') {

 /* тут обработка, отправка и редирект */

}
else {

 /* тут рендер формы*/

}


UPD, вот оно чо - if(msg == 'ok') - премило. То есть сервер ничего не может написать и ответить. Идиотский скрипт.

laimas 16.08.2016 14:35

Цитата:

Сообщение от warren buffet
Элементарного не знает.

А ты знаешь? Как раз начиная с этого if (trim($_POST['valTrFal'])=='valTrFal_true') и начинается пустое.

warren buffet 16.08.2016 14:36

Цитата:

Сообщение от Rise
filter_input

Ни разу этой фигней не пользовался и по-моему она нафиг не нужна, поскольку чтобы вывести форму, требуются данные, и эти же самые данные используются для проверки правильности введенных пользователем данных.

Просто форму сперва надо изобразить как объект со свойствами и методами. Но для ТС это уже совсем-совсем другая история.


Часовой пояс GMT +3, время: 11:28.