Валидация работает, но форма отправляется.
Всем здравствуйте.
Как отменить отправку формы , если валидация не пройдена? У меня форма отсылается в любом случае. Ниже часть индексного файла <link rel="stylesheet" type="text/css" href="style.css" /> <script type="text/javascript" src="js/jquery-1.5.2.min.js"></script> <script type="text/javascript" src="js/jquery.validate.min.js"></script> <script type="text/javascript" src="js/myscripts.js"></script> <script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#formdata").on("click",function () { //это обработчик нажатия кнопки ОТПРАВИТЬ $("#formdata").validate(); var data = $(this).serialize(); $.ajax({// инициализируем ajax запрос type: 'POST', // отправляем в POST формате url: 'obrabot.php', // путь до обработчика, у нас он лежит в той же папке data: data, // данные для отправки cache: false, target: '#p1', success: function (data) { if (data ){ alert ("OKyjyuj"); $("#p1").text(data); } else { alert("no ok"); } } }); return false; }); }); </script> </head> <body> <div style="display: flex;"> <p>Введите чило: </p> <form id="formdata" method="POST" action='obrabot.php' style="margin: 16px;"> <input name='int' type='int' /> <br /><br /><br /> <input type='submit' name='Submit' id="submitsend" value='Отправить' /> </form> <p id="p1"></p> </body> </html> Использую jQuery Validation Plugin Ниже файл myscript.js с правилами и сообщениями $(document).ready(function(){ jQuery.validator.addMethod( 'regexp', function(value, element, regexp) { var re = new RegExp(regexp); return this.optional(element) || re.test(value); }, "" ); $("#formdata").validate({ rules: { int: { required: true, minlength: 4, maxlength: 4, number : true, regexp: '^[1-9]{1}[0-9]*$' } }, messages:{ int:{ required: "поле не заполнено или заполнено не верно", minlength: "в поле должно быть минимум 4 символа", maxlength: "В поле должно быть максимум 4 символа", number : "В поле должны быть только цифры", regexp: "Число не должно начинаться на ноль!!" } } }); }); С английским туго )). |
Влад_имир,
$("#formdata").validate({submitHandler : тут ваш ajax должен быть http://jqueryvalidation.org/validate |
Решил , надо было $("#formdata").validate(); сразу после $(document).ready(function(){
вставить. |
Влад_имир,
строки 8 и 9 в первом коде лишние |
а без submitHandler не обойтись?
|
Цитата:
|
ниже часть файла- обработчика
<? require 'function.php'; header("Content-type: text/plain; charset=utf-8"); /* header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); */ $errors = array(); $str=''; $a=3456; /* $zifra=0; */ if (isset($_POST['int'])) {$str = $_POST['int'];} if (isset($_POST['int'])) {$zifra =(int) $_POST['int'];} /* echo "Переменная \$zifra имеет тип - ". (gettype($zifra)). "<br/>"; */ if ($zifra <= 1000) { $errors[] = "Нельзя вводить число начинающееся с нуля!!"; /* echo "Нельзя вводить число начинающееся с нуля!!"; */ } $arr1 = str_split($str); print_r ($arr1); $length_arr1=count($arr1); print_r($lenght_arr1); $result = array_unique($arr1); $length_result=count($result); /* print_r($result); print_r($length_result); */ if ($length_result<$length_arr1) { $errors[] = "Нельзя вводить повторяющиеся цифры!!"; /* echo "Нельзя вводить повторяющиеся цифры!!"; */ } if(isset($errors)){ foreach($errors as $msg){ echo $msg; } return false; } не пойму почему print_r($lenght_arr1); null? print_r($length_result); - работает |
Влад_имир,
ждите php специалистов |
Цитата:
|
если в браузере http://localhost:63342/as/index.php то останавливается на странице обработчика,зато валидация работает на клиенте.
а если http://as/ то без перезагрузки и форма все равно отправляется. В чем прикол РОНИ? |
Влад_имир,
поиск по форуму validate может на какие мысли натолкнёт и если вы отправили данные с помощью ajax почему страница должна перезагрузится (если всё правильно и submit самой формы отменён) |
echo "Переменная \$zifra имеет тип - ". (gettype($zifra)). "<br/>"; */ if ($zifra <= 1000) { $errors[] = "Нельзя вводить число начинающееся с нуля!!"; /* echo "Нельзя вводить число начинающееся с нуля!!"; */ } Влад_имир, зачем так проверять? Что вообще ожидается? |
Цитата:
|
Ну если не интересует, а это ведь полнейшая профанация, тогда вопросов нет.
|
Цитата:
|
>Здесь проверка на ввод 4 -х значного числа, которое не должно начинаться на ноль.
То есть $zifra <= 1000 означает, что число начинается на 0? У вас ведь далее именно эта ошибка и выводится. Так вы ведь вообще не проверяется что это, действительно ли цифра, ибо gettype($zifra) определенно вернет вам string, хотя пользователь введет цифры, так как все что не пришло в полях формы, это строки. А значит надо: if($num = (int)$_POST['key']) { //$num это integer и не равно 0 } else //не соответствует услвоию У вас диалог с сервером асинхронный, а так как в любом случае сервер обязан проверять данные извне, то на клиенте эту проверку можно и не делать. Для современных браузеров можно добавить новые возможности формы, которые и будут делать проверку, а старые браузеры идут лесом, сервер проверит все равно. И как раз на сервер нужно грамотный иметь скрипт и удобный тип данных для обмена с клиентом. А на клиентской стороне продумать отображение сообщений. |
Ну вроде может быть, а вот на самом деле там бог весь что написано.
print_r() - в удобном виде просмотреть структуру массива, вы же используете его для вывода количества элементов массива. Ошибки помещаете в массив, но вместо того чтобы передать их массивом клиенту, для их отображения или сразу оформить их для клиента (implode с тегами), выплевываете их в цикле по одной. К чему return false вообще не понять. |
Цитата:
https://php.net/manual/ru/language.types.integer.php я от этого плясал. а максимальное 4-хзначное число с нулем в первом знаке -0999 |
А что вам мешает добавить проверку еще и на меньше нуля, если важны только положительные? А если для базы, и определить полю только положительные значение, так ли страшно это будет? А еще проще взять абсолютное значение if($num = abs((int)$_POST['key'])) ....
|
У меня проверка на 4 знака есть.
|
laimas , Вы лучше подскажите вот по этому вопросу #7 (permalink)
|
Так я вам о вашем РНР коде и говорю, тот что в посте #7 - ни к черту не годится. Ну вы же пишите на РНР, следовательно должны понимать, что к примеру, неудачное представление данных породит неэффективный код их обработки, неудачный html-код отображающий эти данные, а значит и на клиенте для его обработки придется делать лишние телодвижения.
У вас ну совсем простая задача, но она не продумана на сервере, а значит и на клиенте не понять что будет и что надо. Ну представьте задачу визуально, определитесь с тем что потребуется, нужно ли там и там проверять, или же определиться с приоритетами... Вот тогда появится и логика, и не будет лишнего. А я высказал свое мнение по #7, а как вы будете делать, это уже не мне решать. |
спасибо
|
А у меня наоборот не отправляется форма... валидация работает, а форма ни гу-гу... фигня какая-то.... Может кто поможет?
|
Часовой пояс GMT +3, время: 11:03. |