Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 16.03.2018
Сообщений: 52

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

16.03.2018, 18:05. Показов 4895. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru