Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013
Помог: 0 раз(а)
Использую структуру MVC, интересует как лучше реализовать вывод ошибок для пользователя. Допустим при регистрации.
В контроллере есть метод валиции данных, как правильно при проверке того или иного параметра
-создавать ошибку
-при наличии ошибок, чтобы не выполнялись следующие методы регистрации пользователя
-как выводить данную ошибку или ошибки
DelphinPRO
Отправлено: 08 Октября, 2013 - 23:28:52
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
хз, как лучше
я особо не заморачиваюсь. список ошибок - в сессионный массив, а оттуда на страницу, в специально отведенное место наверху.
Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013
Помог: 0 раз(а)
Как-то хотелось бы избежать этих if ($this->errorCount)
И всегда нужно лучше перенаправление (чтобы F5 не работал) или это не принципиально?
deblogger
Отправлено: 01 Ноября, 2013 - 09:22:54
Новичок
Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
[+]
В спойлере жуть. Сама собой корячится таблица (структура) всех параметров необходимых для входа, которая сама себя и проверит. Другими словами метод надо превратить в проперть и сделать другой метод.
Для ТС
Чуть более еще с другой стороны видно что описывать эту структуру в скрипте нет никакой нужды - она и так уже есть в БД. Таким образом проверка реализуется ровно в одной точке - в цикле перебора всех введенных данных с правильными данными которые предусмотрены условиями. Правильные данные берутся из той же таблицы. Например если поле NOT NULL - стало быть пустым это поле оставлять нельзя. Если у поля индекс UNiQUE - значит введенное имя не должно совпадать с другим. Если поле пароль - наоборот, должно совпадать. Правила для паролей точно так же легко сохранить в БД. Далее, у поля есть имя - по этому имени (таблица.имя_поля) можно достать "перевод" Таким образом в цикле вентилируя все записи и сравнивая с тем что ввел юзер можно поведать ему обо всех ошибках без череды иф дзен. (Добавление)
Я знаю что программисту в стопицот раз проще забацать хоть стопицот таких иф эмпти дзен чем корячится с проектированием бд, но это не значит что нет другого пути. Это всего лишь вопрос выбора. (Добавление)
В принципе СУБД сама может все проверить и сообщит о косяках. Но переводить ее мессаги на человеческий, даже по номеру ошибки, в смысле не на человеческий, а на юзерский - не такое простое дело.
Например вы можете инициировать запись введенных данных (после всех санаций ессно) и, если табля спроектирована правильно - СУБД (майскля) не даст записать неправильно.
Вы же проверяете наличие такого юзера запросом к БД. Симметрично можно проверить и наличие правильности всех введенных данных.
Но вообще-то все это делается на яве. На php еще раз делается - но там уже не надо расшаркиваться - для особо умных которые умудрились пробиться через проверки на JS можно обойтись без церемоний. Ну, то есть сразу на ... и все.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
deblogger пишет:
На php еще раз делается - но там уже не надо расшаркиваться - для особо умных которые умудрились пробиться через проверки на JS можно обойтись без церемоний. Ну, то есть сразу на ... и все.
Интересная мысль Как-то не приходило в голову.
----- Чем больше узнаю, тем больше я не знаю.
deblogger
Отправлено: 01 Ноября, 2013 - 20:28:40
Новичок
Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
[+]
Чтобы проверять js'ом не прибегая к гемору а аяксом (если конечно он уже не течет в рабочем порядке), в браузер придется загрузить все минимально необходимые данные. Иначе жиэз нечем будет работать. Эта самая загрузка автоматически откроет и такие возможности как мило сообщить юзеру сколько и чего он должен ввести. Прямо в плейсхолдеры можно вписать скажем "Имя, 64 буквы", или там "Возраст, целое число". В хтмле5 много интересных элементов появилось, но не в браузерах пока. Например для чисел есть поле, в браузерах есть кое-где. Сведения о том что можно вносить в таблицю Юзеры и чего нельзя - берутся из таблицы Юзеры. Кроме стандартного метода fetch_field() можно применить нестандартный - скачать инфо о табле с информационной схемы.
Кстати, fetch_field не дает каментов - их, если нужны, а они могут быть применены как тот самый перевод закодированных имен полей на человеческий - придется скачивать именно с СУБД. (Добавление)
Сам-то я без году неделя этим занимаюсь, но что удивительно не встречал применения этим всем данным. Казалось бы ну возьми да проверь флаг поля - нулабле оно, или не нулабле. Отталкиваясь от сего факта проверяй на пусто после трима. Нет, блин, запузырят на свой лад, типа и так понятно что тут не должно быть пусто.
Потом значит захотелось поле добавить или удалить - и понеслась по всем классам с инклюдами корректировка.
Попробуйте сделать так чтобы в таблице появилось поле - и в другой таблице правило для него - и оно автоматически появилось в интерфейсе и начало функционировать. Удалилось поле из таблицы - ну и туда ему и дорога. В интерфейсе тоже пропало и никаких сообщений о недостаче.
dcweb
Отправлено: 10 Января, 2014 - 00:04:50
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013
Помог: 0 раз(а)
deblogger
А можно пример как такое делается?
TroL
Отправлено: 10 Января, 2014 - 08:13:37
Гость
Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012
Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013
Помог: 0 раз(а)
TroL
Меня интересует как правильно сделать валидацию формы в соответствии со структурой базы, то что deblogger описал в своих сообщениях.
Ch_chov
Отправлено: 10 Января, 2014 - 11:42:26
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
deblogger, знать структуру базы данных недостаточно для посторения валидаторов. Например, как сделать валидацию емайла или номера телефона? Как быть с данными которые хранятся не в БД или вообще нигде не хранятся?
Другой вариант, создавать сначала модель. И на ее основе генерить валидаторы и структуру БД.
dcweb
Отправлено: 10 Января, 2014 - 18:00:37
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013
Помог: 0 раз(а)
Ch_chov
deblogger пишет:
Например если поле NOT NULL - стало быть пустым это поле оставлять нельзя. Если у поля индекс UNiQUE - значит введенное имя не должно совпадать с другим. Если поле пароль - наоборот, должно совпадать. Правила для паролей точно так же легко сохранить в БД. Далее, у поля есть имя - по этому имени (таблица.имя_поля) можно достать "перевод"
Как я понимаю нужно для этого сделать ещё одну таблицу или комментарий для поля использовать.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.