форма обратной связи
Всем доброго времени суток.
Нашел на просторах интернета 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> |
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', так что ищи проблему там :) |
Spass,
Это понятно что на сервере нужно возвращать 'ok'. Вот только не понятно где именно ошибка в скрипте. |
<?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'; } ?> |
Разобрался.
Была ошибка синтаксиса в contact.php в 23 строке. |
Цитата:
PS. И уберите ошибку в РНР коде - строка 23 не закрыта кавычкой |
maxg5, тебе говорят убери отправку письма на введенный в форме адрес. Иначе с твой формы начнут хреначить спам на весь рунет.
|
Цитата:
if (trim($_POST['valTrFal'])=='valTrFal_true') { /* тут обработка, отправка и редирект */ } else { /* тут рендер формы*/ } UPD, вот оно чо - if(msg == 'ok') - премило. То есть сервер ничего не может написать и ответить. Идиотский скрипт. |
Цитата:
|
Цитата:
Просто форму сперва надо изобразить как объект со свойствами и методами. Но для ТС это уже совсем-совсем другая история. |
laimas, ну если ТС нашел такой дебильный скрипт, значит там и такие вот дебильные проверки будут.
|
Цитата:
Цитата:
|
ТС, вот тут вроде похоже на правду https://gist.github.com/ajtroxell/6731408 хотя и гитхаб
|
Цитата:
|
Цитата:
|
Цитата:
|
Такие вещи все равно делаются через БД. Почта теряется, залипает в спаме, ходит как попало. А когда есть БД, то основную часть данных о полях можно получить прямо из свойств полей таблицы, здесь таблицы отзывов. Например если поле name not null и нет никакого default, то значит в форме оно будет reuired, а если есть default, то сразу пишем в value этого поля в форме, что в default внесено на этапе создания таблицы. Еще можно вычислять maxlength для текстовых полей. Для полей под числа можно узнать тип числа и допустимое количество знаков за запятой. Дофига чего в общем. Затем в эти же данные просто добавляются паттерны и по обстоятельствам дополнительные свойства и готов объект для рендера формы и для валидации одновременно.
|
Цитата:
|
Несешь бред, понос словесный о базе и прочей лабуде.
|
laimas, ты же вроде специалист по реляционным беде и должен знать, как получить инфу о таблице. Это можно сделать в том числе через information_schema, зацени
$q='select `table_name`,`column_name`,`data_type` as `dtype`, coalesce(`character_maximum_length`,`numeric_precision`) as `maxlength`, `numeric_scale` as `decimals`, `column_key`, (`is_nullable`="NO" && `column_default` is NULL) as `required`, `column_default` as `value`, `column_type` as `data` from `information_schema`.`columns` where `table_schema`="'.$this->db_name.'" and `table_name`="'.$table_name.'"'; Затем еще немного преобразования табличных типов данных в типы полей формы $sql_types=array( 'varchar|text|year|char|tinytext|mediumtext|longtext' => 'text', 'int|decimal|tinyint|smallint|mediumint|bigint|float|double|real' => 'number', 'enum|set' =>'select', 'timestamp' =>'datetime-local', 'bit|boolean|serial'=>'range' ); и конечно потребуется процедура и получаем заготовку с массой готовой инфы, которую уже не надо профтыкать в моделях. Узбагойся уже. |
Цитата:
Характеристики полей таблицы могут служить источником для конструктора форм, только получают их не так примитивно, как это ты излагаешь, а тем более не для того, чтобы содержать их под такими ужасающими ключами в массиве. Но дело не в этом - нафига весь этот понос нужен в контексте темы, где речь об отправке почты от формы, которая даже раз в 100 лет не потребует изменений, и ее данные не нужно сохранять в базе? Вот ради чего это твое очередное словоблудие? Подсказать способ проверки полей этой формы? Так причем тут база, если в данном случае на все 100 выгоднее просто прописать условия, да и направить эти данные в единый валидатор данных если он есть труда не составит. В очередной раз хотелось показаться умным? Так наоборот получается - код настолько слаб и необдуман, что впору назвать его твоей же терминологией - дебильный. Прежде чем ляпнуть языком - думай, и если есть действительно нужное и полезное говори, нет, молча проходи мимо. И не дублируй уже все высказанное в темах практически "вылизанных", твоя "точка" в них это уже гольный флуд. |
Цитата:
|
Цитата:
|
Цитата:
Ты начитался умных книжек, а пользоваться этим не умеешь, я уже трижды наблюдаю твой "пехепе" - полнейший бред. У тебя есть проблески разумного в JS и даже без лексики гопника, но они так редки, что невольно возникает подозрение, не плагиат ли это. Пиши в "пехепе", храни в "беде", верстай в "хтмля", я не против. |
Слушай, но ведь твои "чеса" с лихвой перекрывают все беде и пехепе. Или нет? )))
|
Идея "единого валидатора" живее всех живых. На самом деле делается ровно наоборот, вот как на пехепе.
foreach($this->_d as $field) { try { if($field->name) $field->validate($post); } catch(_CException $e){ /* уловитель ошибок */ } } и примерно то же самое на js, но без цикла, потому что поле просто вызывает валидацию самого себя через "единую" функцию, где надо провести некоторые мероприятия общего порядка, вроде стереть предыдущую ошибку и проверить как там с остальными полями - можно ли включать кнопку "Отправить". validate=function(evt) { var input=the.inputs[evt.detail.name]; /* тут обнуляется прошлое */ try { input.validate(); isComplete(); /* быстрый осмотр индикаторов ошибок всех полей */ } catch(e) { /* уловитель ошибок */ } } the.form.addEventListener('validate',validate); То есть это метод валидации на лету, когда кнопка Отправить становится активной только когда можно отправлять. Так вот, а теперь моем внешние половые органы в беде. В такой конфигурации я добавляю поле в таблице базы данных и, если меня не колебет перевод на русский язык его названия и не колебет расположение в форме - мне ничего делать больше не надо: поле появится в форме со всей минимально необходимой инфой и для верстки и для проверки. То есть такой мини phpMyAdmin. Само собой абсолютно любую форму обслуживают одни и те же скрипты. Хоть 100500 форм нарисуй - все что потребуется, это перевести на русский название поля и определить его метоположение в форме если хочется дизайна, а не хочется - оно и так одно за другим выведется с оригинальными именами. |
Часовой пояс GMT +3, время: 17:26. |