Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Валидация формы на стороне клиента и сервера

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: валидация формы
Anastasia24
Отправлено: 09 Января, 2017 - 18:54:08
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




Здравствуйте. Сейчас разбираюсь с валидацией формы.
Раньше делала на стороне клиента с помощью Jquery Validation Plugin.
Сейчас также обрабатываю данные на стороне сервера.

Вот моя форма:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. <form id="form" method="post" action="javascript:void(0);" onsubmit="ajax()">
  4.     <p>Ваше имя</p>
  5.     <p><input type="text" id="name" name="name" class="name" value="" /></p>
  6.     <p>Ваш email</p>
  7.     <p><input type="text" name="email" class="email" value="" /></p>
  8.     <p>Тема</p>
  9.     <p><input type="text" name="subject" class="subject" value="" /></p>
  10.     <p>Сообщение</p>
  11.     <p><textarea name="message" class="message"></textarea></p>
  12.     <p><input type="submit" name="send" class="send" value="send"></p>
  13. </form>
  14.  
  15. <div id="results"></div>
  16.  
  17. <div id="res"></div>
  18. </body>
  19.  


После нажатия на submit выполняется фцнкция ajax():

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function ajax() { //Ajax отправка формы
  3.     var msg = $("#form").serialize();
  4.     $.ajax({
  5.         type: "POST",
  6.         url: "send.php",
  7.         data: msg,
  8.         success: function(data) {
  9.             $("#results").html(data);
  10.             if($("#results").val()=="SUCCESS VALIDATION"){
  11.               addData();
  12.             }
  13.         },
  14.         error:  function(xhr, str){
  15.             alert("Возникла ошибка!");
  16.         }
  17.     });
  18. }
  19.  


Если send.php вернул SUCCESS VALIDATION, то вызываем функцию addData().

Также есть валидация на стороне клиента:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function(){ //Валидация формы
  3.  
  4.     $( "#form" ).validate({
  5.         rules:{
  6.             name:{
  7.                 required: true
  8.             },
  9.             subject:{
  10.                 required: true
  11.             },
  12.             email:{
  13.                 required: true
  14.             },
  15.             message:{
  16.                 required:true
  17.             }
  18.         },
  19.         messages:{
  20.             name:{
  21.                 required: "This field is required"
  22.             },
  23.             subject:{
  24.                 required: "This field is required"
  25.             },
  26.             email:{
  27.                 required: "This field is required"
  28.             },
  29.             message:{
  30.                 required: "This field is required"
  31.             }
  32.         },
  33.         submitHandler: function(form) {
  34.  
  35.             addData();
  36.         }
  37.  
  38.     });
  39.  
  40.     $("#form input").click(function () {
  41.         $("#res").text("");
  42.  
  43.     });
  44.  
  45.  
  46. });
  47.  


И также при успешной валидации выполняется функция addData().

Не могу понять, в случае успешной валидации и на сервере, и на клиенте , addData() будет вызываться 2 раза? А если я в ней добавляю записи в БД, то получится, что одно и то же пишу 2 раза.

Как поступить в данном случае?

Заранее спасибо за помощь!
(Добавление)
Никто не может дать совет?

(Отредактировано автором: 09 Января, 2017 - 18:54:39)

 
 Top
caballero
Отправлено: 10 Января, 2017 - 00:59:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




а на фига двойная валидация?
тем более что половину клиентсrой валижации выполнит сам браузер в соответс твии с стандартом html5


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Le0_Nard
Отправлено: 10 Января, 2017 - 01:40:37
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2015  
Откуда: Минск, Беларусь


Помог: 0 раз(а)




Во-первых, required можно прописать в сами теги, зачем идти в обход через JS?
Во-вторых, если прописать в теге required, то при любой попытке отправки сам браузер ткнёт юзверя лицом в то, что где-то в поле пусто
В-третьих валидацию и правда нужно проводить и у клиента и на сервере, т.к. никто не отменял умельцев с инструментами разработчика.
А дважды выполняется, потому что:
CODE (javascript):
скопировать код в буфер обмена
  1. // 1:
  2. submitHandler: function(form){addData();}
  3.  
  4. // 2:
  5. if($("#results").val()=="SUCCESS VALIDATION"){addData();}
  6.  


Намного проще пойти так:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function ajax() { //Ajax отправка формы
  3.  if(validate($("#form")){ //Само сабой, эту функцию надо будет описать, и сделать в ней return true||false
  4.  $.ajax({
  5.   type: "POST",
  6.   url: "send.php",
  7.   data: $("#form").serialize(),
  8.   success: function(data) {
  9.     $("#results").html(data);
  10.     //так понимаю, addData() - отсылает форму для сохранения в БД. Зачем делать два запроса к серверу? Объедините валидацию и сохранение в один запрос:
  11.       //Валидно - сохраняем, шлём ответ "Умнищка"
  12.       //Невалидно - шлём ответ "Дурашка" и не сохраняем.
  13.     //Ну а здесь, непосредственно, обработка самого ответа.
  14.    },
  15.    error:  function(xhr, str){
  16.     alert("Возникла ошибка!");
  17.    }
  18.   });
  19.  }else{alert('Где-то в поле пусто...');}
  20. }
  21.  
 
 Top
caballero
Отправлено: 10 Января, 2017 - 11:15:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
валидацию и правда нужно проводить и у клиента и на сервере, т.к. никто не отменял умельцев с инструментами разработчика.

если есть валидация на сервере то никакие инструменты разработсика не помогут


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB