0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52

Валидация формы + ajax обработка

16.03.2018, 18:05. Показов 4959. Ответов 14

Студворк — интернет-сервис помощи студентам
Имеется такая форма:

html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form method="post" action="#" id="callbacks">
    <div class="field half first">
        <label for="name">Name</label>
        <input class="formfield" required="required" type="text" name="name" id="name" />
    </div>
    <div class="field half">
        <label for="email">Email</label>
        <input class="formfield" required="required" type="text" name="email" id="email" />
    </div>
    <div class="field">
        <label for="message">Message</label>
        <textarea class="formfield" required="required" name="message" id="message" rows="4"></textarea>
    </div>
    <input name="4ed5rf6tvgybu" type="text" style="display:none" value="" />
    <ul class="actions">
        <li><input id="btncontcall" type="submit" value="Send Message" class="special" /></li>
        <li><input id="btnresetform" type="reset" value="Reset" /></li>
    </ul>
</form>
php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
 
/* Задаем переменные */
$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);
$message = htmlspecialchars($_POST["message"]);
$bezspama = htmlspecialchars($_POST["4ed5rf6tvgybu"]);
 
/* Ваш адрес и тема сообщения */
$address = "sale@abv22.ru";
$sub = "Сообщение с сайта tesim.abv22.ru";
$sub=iconv("UTF-8", "windows-1251", $sub);
 
/* Формат письма */
$mes = "Сообщение с сайта tesim.abv22.ru.\n
Имя отправителя: $name 
Электронный адрес отправителя: $email
Текст сообщения:
$message";
$mes=iconv("UTF-8", "windows-1251", $mes);
 
 
if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/
{
/* Отправляем сообщение, используя mail() функцию */
$from  = "From: $name <$email> \r\n Reply-To: $email \r\n";
if (mail($address, $sub, $mes, $from)) {
 header('Refresh: 1');
 echo '<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
    <body>Письмо отправлено</body>';}
else {
 header('Refresh: 1');
 echo '<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
    <body>Письмо не отправлено</body>';}
}
exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
?>
javascript (jquery)
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<script>
    $(document).ready(function() {
        var pattern = /^[a-z0-9_-]+@[a-z0-9-]+\.[a-z]{2,6}$/i;
        var mail = $('#email');
        mail.blur(function(){
            if(mail.val() != ''){
                if(mail.val().search(pattern) == 0){
                    $("#erconts").empty();
                    $('#btncontcall').attr('disabled', false);
                }else{
                    $('#erconts').text('Email неверный');
                    $('#btncontcall').attr('disabled', true);
                }
            }else{
                $('#erconts').text('Поле e-mail не должно быть пустым!');
                $('#btncontcall').attr('disabled', true);
            }
        });
        $('#callbacks').validate({});
        $("#btncontcall").click(function(){
            $.ajax({
                type: "POST",
                url:"mail.php",
                data:$("#callbacks").serialize(),
                error:function(){$("#erconts").html("Произошла ошибка!");},
                beforeSend: function() {
                    $("#erconts").html("Отправляем данные...");
                },
                success: function(result){
                    $("#erconts").html(result);
                    checkThis();
                }
            });
            return false;
        });
        $("#btnresetform").click(function(){
            $("#erconts").empty();
        });
    });
</script>
Jquery и валидатор подключены.
В скрипте проверка email на правильность( далее 1й скрипт ), ajax запрос для отправки формы без перезагрузки страницы ( далее 2й скрипт ) и валидация формы ( далее 3й скрипт ).
1 и 2 скрипты вместе работаеют, но если подключить валидатор, то всё перестаёт нормально работать, страницы перезагружается и поле с почтой не проверяется.

Нужно объеденить 3 скрипта в один правильно рабочий.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2018, 18:05
Ответы с готовыми решениями:

Обработка формы ajax
Здравствуйте, подскажите плиз. Не могу найти ошибку, видать знаний не хватает еще(( Мне необходимо обработать форму без обновления...

AJAX полная обработка формы
Ребят можно ли как-то обработать форму с помощью пхп неким ajax? то есть отправить значения пхп программе как и при обычном использований...

Валидация формы и отображение првильности заполнения формы
Добрый день, я имею очень большую форму в несколько шагов и каждый заполненный input сопровождается состоянием неких точек. Например: ...

14
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
16.03.2018, 22:58
не нужно вешать событие на поле с email.
событие только на submit
валидацию в отдельную функцию
или все в одной функции перед отправкой данных

JavaScript
1
2
3
4
5
6
7
8
 $("#btncontcall").click(function(e){
      e.preventDefault();
 
      //запусаем функцию валидации
      //если есть ошибки, выводим
      // если валидация прошла, отправляем данные 
 
}
0
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52
16.03.2018, 23:59  [ТС]
Сделал так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script>
    $(document).ready(function() {
        $("#btncontcall").click(function(e){
            e.preventDefault();
            $('#callbacks').validate();
            $.ajax({
                type: "POST",
                url:"mail.php",
                data:$("#callbacks").serialize(),
                error:function(){$("#erconts").html("Произошла ошибка!");},
                beforeSend: function() {
                    $("#erconts").html("Отправляем данные...");
                },
                success: function(result){
                    $("#erconts").html(result);
                    checkThis();
                }
            });
        }
        $("#btnresetform").click(function(){
            $("#erconts").empty();
        });
    });
</script>
ajax всё-равно не работает, не выводит сообщения в #erconts и перезагружает страницу.
Я что-то не так написал?
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
17.03.2018, 14:55
Цитата Сообщение от akaKoren Посмотреть сообщение
#erconts
а где у вас форме
id = 'erconts'

Добавлено через 1 минуту
Цитата Сообщение от akaKoren Посмотреть сообщение
$("#btnresetform").click(function(){
* * * * * * $("#erconts").empty();
reset у вас по моему тоже не правильно работает

даже если так сделайте , или уберете вообщем
JavaScript
1
2
3
  $("#btnresetform").click(function(){
 
        });
Добавлено через 1 минуту
у вас там type reset поэтому срабатывает, а в скрипте условие не работает

Добавлено через 1 минуту
Цитата Сообщение от akaKoren Посмотреть сообщение
страницы перезагружается и
потомучто type submit
0
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52
17.03.2018, 14:56  [ТС]
erconts находится под формой, в него выводятся сообщения при проверке email. Скрипт для reset просто чистит erconts. Он нужен и работает.

До встаривания валидации ajax перехватывал type submit и страница не перезагружалась
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
17.03.2018, 15:34
//$('#callbacks').validate({});
это уберите и заработает

Добавлено через 25 секунд
у меня по крайне мере заработало, но я php файл не проверял просто рандомную запись вывел

Добавлено через 48 секунд
Цитата Сообщение от akaKoren Посмотреть сообщение
Скрипт для reset просто чистит erconts. Он нужен и работает.
у меня не сработал( что без него что с ним одно и тоже

Добавлено через 2 минуты
на вашем пчх файле тоже сработало вывело письмо отправлено
и советую
PHP
1
2
3
4
$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);
$message = htmlspecialchars($_POST["message"]);
$bezspama = htmlspecialchars($_POST["4ed5rf6tvgybu"]);
cделать так
PHP
1
2
if($_POST["name"])) {$name = htmlspecialchars($_POST["name"]);}
else {die("Поле имя не существует");}
и тд.

Добавлено через 1 минуту
или еще лучше
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
if(isset($_POST["name"]) AND isset($_POST["email"]) AND isset($_POST["message"]) ) {
 
 
$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);
$message = htmlspecialchars($_POST["message"]);
$bezspama = htmlspecialchars($_POST["4ed5rf6tvgybu"]); //это я хз что
 
 
 
 
}
else {die("Форма не заполнена или еще что то");}
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.03.2018, 16:01
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 function validate() {
    var pattern = /^[a-z0-9_-]+@[a-z0-9-]+\.[a-z]{2,6}$/i;
    var mail = $('#email').val();
    var text_error = '';
 
    if (!mail.match(pattern)) {
    text_error += 'Email неверный <br>';
    }
    if ( mail.length == 0) {
    console.log('type of unefined')
    text_error += 'Поле e-mail не должно быть пустым!<br>';
    }
 
    return text_error;
};
 
 
 
$(function () {
    $("#btncontcall").click(function (e) {
    e.preventDefault();
    var error = validate();
    if (error.length == 0) {
        $.ajax({
        type: "POST",
        url: "mail.php",
        data: $("#callbacks").serialize(),
        beforeSend: function () {
            $("#erconts").html("Отправляем данные...");
        },
        success: function (result) {
            $("#erconts").html(result);
        }
        });
    }else{
        $("#erconts").html(error);
    }
    });
 
    $("#btnresetform").click(function () {
    $("#erconts").empty();
    });
 
})
1
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52
17.03.2018, 19:29  [ТС]
Решил проблему заменой jQuery валидатора на проверку заполненности полей в PHP
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.03.2018, 19:38
Цитата Сообщение от akaKoren Посмотреть сообщение
Решил проблему заменой jQuery валидатора на проверку заполненности полей в PHP
а чем мой вариант не подошел?
1
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52
17.03.2018, 21:00  [ТС]
Цитата Сообщение от fanatikus Посмотреть сообщение
а чем мой вариант не подошел?
Твой комментарий я увидел уже после решения. Возможно он помог бы, но менять что-то я уже не хочу, пока работает как надо.
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.03.2018, 21:05
Цитата Сообщение от akaKoren Посмотреть сообщение
Возможно он помог бы,
он рабочий 100%. проверено
1
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52
17.03.2018, 21:07  [ТС]
Цитата Сообщение от fanatikus Посмотреть сообщение
он рабочий 100%. проверено
Окей, если будет необходимость - воспользуюсь вариантом, спасибо.
0
6 / 6 / 5
Регистрация: 15.01.2016
Сообщений: 220
18.03.2018, 20:54
fanatikus,
спасибо за код. Но есть вопрос.

Цитата Сообщение от fanatikus Посмотреть сообщение
JavaScript
1
2
3
4
5
6
7
function validate() {
* * var pattern = /^[a-z0-9_-]+@[a-z0-9-]+\.[a-z]{2,6}$/i;
* * var mail = $('#email').val();
* * var text_error = '';
if (!mail.match(pattern)) {
* * text_error += 'Email неверный <br>';
* * }
я ввожу почту с цифрами, но выпадает ошибка, что мыло неверное. Как патерн изменить, что бы пропускал почту с цифрами?
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
19.03.2018, 00:13
прекрасно пропускает цифры. проверено
0-9 это что по вашему?
0
6 / 6 / 5
Регистрация: 15.01.2016
Сообщений: 220
19.03.2018, 00:20
fanatikus,
да, странно. Набрал от балды почту с цифрами, пропустило. А мою личную почту с цифрами не пускает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2018, 00:20
Помогаю со студенческими работами здесь

Ajax загрузка формы из загруженного через ajax блока
Вообщем, через ajax в блок подгружается форма, из нее нужно загрузить в этот же блок др.контент. $('#form').submit(function(e){ ...

Валидация формы
Всем привет, Есть обычная html форма &lt;form method=&quot;post&quot; id=&quot;formRegistration&quot; enctype=&quot;multipart/form-data&quot;...

Валидация формы
как посредством jquery не дать юеру отправить форму, если он в ней ничего не выбрал ?

Валидация формы
Загрузить на сайт не удалось файлы, еще какой-то непреодолимой мистикой они некорректны. del Суть проблемы: нужно накинуть на...

валидация формы
Нашел в интернете примеры, того , как поле в форме делается невозможным для написания слова, меньше заданной длины. И проверку с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru