Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2016, 10:46
Аспирант
Отправить личное сообщение для maxg5 Посмотреть профиль Найти все сообщения от maxg5
 
Регистрация: 16.08.2016
Сообщений: 89

форма обратной связи
Всем доброго времени суток.
Нашел на просторах интернета 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>
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2016, 11:32
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

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', так что ищи проблему там
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2016, 11:50
Аспирант
Отправить личное сообщение для maxg5 Посмотреть профиль Найти все сообщения от maxg5
 
Регистрация: 16.08.2016
Сообщений: 89

Spass,
Это понятно что на сервере нужно возвращать 'ok'.
Вот только не понятно где именно ошибка в скрипте.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2016, 12:34
Аспирант
Отправить личное сообщение для maxg5 Посмотреть профиль Найти все сообщения от maxg5
 
Регистрация: 16.08.2016
Сообщений: 89

<?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';
}
?>
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2016, 13:04
Аспирант
Отправить личное сообщение для maxg5 Посмотреть профиль Найти все сообщения от maxg5
 
Регистрация: 16.08.2016
Сообщений: 89

Разобрался.
Была ошибка синтаксиса в contact.php в 23 строке.
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2016, 13:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от 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 не закрыта кавычкой

Последний раз редактировалось laimas, 16.08.2016 в 13:18.
Ответить с цитированием
  #7 (permalink)  
Старый 16.08.2016, 13:33
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

maxg5, тебе говорят убери отправку письма на введенный в форме адрес. Иначе с твой формы начнут хреначить спам на весь рунет.
Ответить с цитированием
  #8 (permalink)  
Старый 16.08.2016, 13:35
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

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

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

}
else {

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

}


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

Последний раз редактировалось warren buffet, 16.08.2016 в 13:41.
Ответить с цитированием
  #9 (permalink)  
Старый 16.08.2016, 14:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от warren buffet
Элементарного не знает.
А ты знаешь? Как раз начиная с этого if (trim($_POST['valTrFal'])=='valTrFal_true') и начинается пустое.
Ответить с цитированием
  #10 (permalink)  
Старый 16.08.2016, 14:36
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HEELP please, форма обратной связи mecker_pry Общие вопросы Javascript 0 09.06.2016 01:44
Нужна помощь - форма обратной связи со скачиванием файла Baton1777 Общие вопросы Javascript 3 24.05.2015 02:21
Форма обратной связи Васька jQuery 1 17.12.2014 12:53
ajax форма обратной связи anton-mgn AJAX и COMET 7 15.09.2011 20:42
Форма обратной связи Antifactor Я не знаю javascript 2 09.06.2009 15:21