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]   

> Без описания
OrmaJever Модератор
Отправлено: 15 Мая, 2014 - 11:50:51
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




У меня сложился спор с одним человеком по поводу валидации форм, помогите понять кто прав. Есть 2 варианта реализации, оба ajax

1) Простая клиентская форма которая отправляет данные на сервер, сервер в свою очередь проверяет каждое поле и возвращает ошибки по очереди, ну например если не правильно заполнены 3 поля то покажет только про первое, затем когда исправят первое, покажет про второе и т.д.

2) Валидация формы регулярками на js, дальше на сервере валидация такими же регулярками но в случае не совпадении с чем-то просто делать return из метода, то есть при плохих данных сервер не вернёт ошибку, а просто вернёт пустоту.

Важно мнение каждого, и желательно обосновать почему именно так Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Мая, 2014 - 12:05:03
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




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

Первый вариант несостоятелен, т.к. неудобен пользователю. UI делается для пользователя, а не программиста.
Второй вариант неудобен для серверных проверок. Надо иметь возможность отдать пользователю пояснение, на клиенте всё не описать. Даже просто "такой пользователь уже зарегистрирован", "это промо-код уже зарегистрирован" для магазинов или что-то ещё, что проверить на клиенте невозможно.


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 15 Мая, 2014 - 12:13:17
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Мелкий пишет:
Во-вторых, полновесная серверная валидация с проверкой полей, возвратом читаемых пользователем ошибок.

В п1 подразумевается серверная валидация и вывод всплывающего окошка где-то в углу и описание ошибки.
Мелкий пишет:
Во-вторых, полновесная серверная валидация с проверкой полей, возвратом читаемых пользователем ошибок

Это не входило в п2 из-за сокращения кода, т.к. полей около 10.
Мелкий пишет:
Второй вариант неудобен для серверных проверок. Надо иметь возможность отдать пользователю пояснение, на клиенте всё не описать. Даже просто "такой пользователь уже зарегистрирован", "это промо-код уже зарегистрирован" для магазинов или что-то ещё, что проверить на клиенте невозможно.

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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Edwvee
Отправлено: 15 Мая, 2014 - 12:53:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


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




Цитата:
п1 подразумевается серверная валидация и вывод всплывающего окошка где-то в углу и описание ошибки.

Так это не дает защиты при внесении данных в бд на сервере. js валидацию банально можно отключить вручную и отправить форму.
 
 Top
Zuldek
Отправлено: 15 Мая, 2014 - 13:54:02
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




Однозначно 3 пункт.
Проверять только все поля как на клиенте так и на сервере, ошибки выводить только непосредственно рядом с каждым полем.
Если валидации космически тяжелые с несколькими фильтрами на каждое поле, требущих обращений к внешнему источнику для проверки — выводить ошибку по первому сработавшему фильтру на каждое поле. То есть, если к примеру значение обязательное, то после проверки на пустоту нет смысл пытаться проверить регуляркой и нет смысла сверять его с списком доступных значений внешнего сервиса (третий уровень фильтрации).

(Отредактировано автором: 15 Мая, 2014 - 14:39:50)

 
 Top
Krava
Отправлено: 15 Мая, 2014 - 14:16:27
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2013  


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




Второй вариант, самый простой. Сделать один класс на JS и постоянно его пилить и переносить на другие проекты. А если валидация на сервере не проходит, то просто redirect.
 
 Top
esterio
Отправлено: 15 Мая, 2014 - 18:15:36
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




3 вариант
 
 Top
OrmaJever Модератор
Отправлено: 15 Мая, 2014 - 19:39:05
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




3 вариант который предложил мелкий это типа смесь первого и второго, и на клиенте проверяем, и с сервера ошибки возвращаем, но зачем? Зачем возвращать ошибки с сервера если клиент и сам про них знает и уже скорее всего вывел (кроме случаев проверки данных в бд)?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
IllusionMH
Отправлено: 16 Мая, 2014 - 12:01:18
Post Id



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


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


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




OrmaJever, на случай если вдруг забыли "синхронизировать" все проверки на клиенте и сервере(к примеру: забыли на клиенте проверку для максимального значения нового поля).
Да и лучше давать хоть какой-то ответ со списком ошибок, чем ничего не возвращать с сервера.
 
 Top
Panoptik
Отправлено: 16 Мая, 2014 - 12:36:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




в своих проектах я использую стандартно накатанную схему
форма по сабмиту отправляется аяксом на сервер, на сервере обрабатываются все поля и возвращается success
если он - тру, то дальше несколько вариантов на выбор (делать локейшн.хреф или вызвать какой-то колбек)
в противном случае у меня имеется массив ошибок, с котрыми я делаю что хочу (либо вывожу в алерте весь список - примитивный случай, либо соответственно каждому полю рядышком в определенную область вывожу эту ошибку и расставляю классы этим полям для подсветки)

таким образом объединяется клиентская и серверная часть (кто-то может возмутиться что мы шлем много запросов, но в распространенных случаях на небольших проектах и/или формах которые предполагается слать не так часто этот вариант работает)

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

какой минус из того что предлагалось выше. это синхронизация сообщений. к примеру на локализированном приложении будет дополнительной проблемой выводить локализированные ошибки как на клиенте так и на сервере, однако когда мы получаем всё с сервера, проблема исчезает.

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


-----
Just do it
 
 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