#3 Практическое задание №3 -- Создание и использование сущности "Пользователь". Авторизация через базу данных (php, mysql)
Primary tabs
Эта третья задание из списка уроков по созданию простой CMS и состоит оно вот в чем:
- Создайте в админке отдельную группу страниц для редактирования (все действия CRUD) сущности "Пользователь", у которой есть три поля: логин, пароль и флаг активности (храните данные пользователя в отдельной таблице) -- сделайте это аналогично имеющемуся функционалу редактирования статей.
- Переделайте процесс входа в систему на такой: если логин не "admin", то используйте для проверки логина/пароля созданную в первом пункте сущность (т.е. в такой ситуации теперь прежде чем записать в сессию признак авторизации, вам придётся отбратиться к БД) - если пользователь не активен (хотя пароль и логин верны), то не проводите авторизацию, а выводите уведомление об этом.
Это же задание с пояснениями на видео: https://youtu.be/saL9eyx1zqY
Полезные материалы
- Пояснение по поводу проверки наличия пользователя в базе (например, перед сохранением формы): https://youtu.be/OlBduxFMVU8
- Видео: Пример процесса поиска ошибки и отладки -- проблема с БД
- Видео: Поиск ошибки (неправильное формирование GET-параметра)
---------
Остальные уроки: http://fkn.ktu10.com/?q=node/9428
- Log in to post comments
- 44472 reads
sid
Thu, 02/08/2018 - 11:25
Permalink
Вопрос
vedro-compota
Thu, 02/08/2018 - 22:58
Permalink
пояснения по задаче
Описал подробности (и т.ч. ответы на вопросы) на видео: https://youtu.be/saL9eyx1zqY
_____________
матфак вгу и остальная классика =)
JinJim
Fri, 02/09/2018 - 19:02
Permalink
решение
https://github.com/kdn2517/my-first-cms-...
vedro-compota
Sat, 02/10/2018 - 12:29
Permalink
НЕ забываем про документирование кода!
@JinJim
Как минимум -- напишите документацию в стиле phpdoc ко всем функциями и полям классов (в том числе к функции testMatches())
-- делайте это всегда когда программируете
(остальных учащихся это тоже касается))
_____________
матфак вгу и остальная классика =)
JinJim
Tue, 02/13/2018 - 23:25
Permalink
Добавил документацию
https://github.com/kdn2517/my-first-cms-...
sid
Mon, 02/12/2018 - 10:58
Permalink
Как можно сделать проверку
Как проверить своиство name на наличие в базе?
vedro-compota
Mon, 02/12/2018 - 16:36
Permalink
перед insert?
зачем вам нужна проверка в данном случае? (уточните)
_____________
матфак вгу и остальная классика =)
sid
Mon, 02/12/2018 - 17:51
Permalink
Нет не перед insert, внутри
Нет не перед insert, внутри его, когда insert начинает работать нужно же знать, вдруг такой логин(name), уже существует как это обработать?
vedro-compota
Mon, 02/12/2018 - 18:09
Permalink
Понял о чём вы.
Понял о чём вы.
по-хорошему да, в этом случае вообще не помешало бы вернуть админу сообщение об ошибке и не добавлять данные, причем сделать контроль не только на уровне приложения (php), но и на уровне БД выставим на столбец login таблицы пользователей ограничение UNIQUE, это называется "ограничением уровня БД", даже если в приложении пойдёт что-то не так, БД всё равно не даст записать дубль.
Более подробное пояснение на видео: https://youtu.be/OlBduxFMVU8
_____________
матфак вгу и остальная классика =)
sid
Mon, 02/12/2018 - 18:45
Permalink
Таблица visiters
Таблица visiters
в этом случае нужно заменить PRIMARY KEY на UNIQUE?
vedro-compota
Mon, 02/12/2018 - 21:19
Permalink
в принципе правильно, но
здесь вот какая ситуация:
- т.е. целое число большого диапазона, а ограничение уникальности накладывают отдельно на нужный столбец таблицы.
_____________
матфак вгу и остальная классика =)
sid
Wed, 02/14/2018 - 17:41
Permalink
Не могу найти ошибку, не
Не могу найти ошибку, не получается обновить пользователя, функция editUser
sid
Wed, 02/14/2018 - 18:34
Permalink
Есть список пользователей в
Есть список пользователей в БД, с помощью функции editUserредактируем выбранного пользователя, вот классэто форма отображения списка пользвователей.
Сам вопрос почему не происходит обновления?
vedro-compota
Wed, 02/14/2018 - 18:43
Permalink
Есть список пользователей в
вы делали распечатку объекта непосредственно перед сохранением? если да -- то как выглядит результат?Как именно вы проводили отладку?
_____________
матфак вгу и остальная классика =)
JinJim
Wed, 02/14/2018 - 22:48
Permalink
Предположу что дело в запросе
Предположу что дело в запросе
Поменять логин не удастся - происходит поиск но новому (введенному в форму) значению, ничего не найдете.
vedro-compota
Thu, 02/15/2018 - 13:57
Permalink
пара замечаний
Хм, я тоже увидел то, что поиск происходит для существующего пользователя, но вопрос был именно про обновление. По-хорошему, если речь идёт о создании, то надо вообще написать отдельную функцию с соответствующими изменениями (а-ля createUser), ну и с отдельным запросом.
Если же писать универсальную функцию, которая по каким-то параметрам пытается выяснить есть ли такой пользователь и обновляет его, если есть или создаёт нового, если нет -- тогда название должно быть более общим, что-то типа saveUser()/
Как проверять, что пользователь уже существовал
По-хорошему, обычно все используемые для отображения поля можно изменить (даже логин на сайте), а потом в качестве главного ключа используется именно число -- его передают на форму редактирования в специальный скрытый инпут (а значит изменить его при редактировании случайно уже нельзя).
Далее все просто -- как POST пришёл скрипту-обработчику, вы проверяете, что id не пуст -- если не пуст, значит надо обновлять (т.е.
в запросе обновления), если же это значение пусто - значит создаём нового пользователя (т.е. INSERT в sql). Эту логику можно упаковать как в одну, так и в две отдельные функции.
_____________
матфак вгу и остальная классика =)
JinJim
Fri, 02/16/2018 - 10:21
Permalink
Полностью согласен, но
в задании говорится. что должно быть три поля - логин, пароль и эктив. Конечно, проще и правильнее делать с id, а можно и без него - я думал это сделано для усложнения задания)
vedro-compota
Fri, 02/16/2018 - 12:23
Permalink
да, так написано, но
замечание верное, но текст задания можно воспринимать и как "со стороны пользователя", т.е. как бы без технических деталей. Переделывать не обязательно, но я просто добавил эту заметку, чтобы уточнить, что в реальности обычно используют скрытое поле с "техническим" id, который пользователи системы "никогда не видят" (условно говоря).
_____________
матфак вгу и остальная классика =)
sid
Fri, 02/16/2018 - 13:40
Permalink
Задание номер 3
Задание номер 3 здесь
Pavel1989
Fri, 05/31/2019 - 23:31
Permalink
Практическое задание №3
Возникает проблема с редактированием существующих пользователей:
1) Поялвяются надписи: "Trying to get property of non-object", указывающие на строки 28,36,44,60
файла editUser.php.
2) После редактирования пользователя и сохранения изменений, изменения не применяются.
Pavel1989
Sat, 06/01/2019 - 12:12
Permalink
Дополнение к вопросу по ПР3:
С первой проблемой разобрался при помощи добавления проверки isset:
Надписи "Trying to get property of non-object" перестали отображаться.
НО обновление логина и пароля пользователя не происходит про прежнему.
Ссылка на коммит: ПР3
toyrik
Fri, 10/18/2019 - 14:17
Permalink
решение для проверки
коммит
dimmkan
Mon, 10/28/2019 - 21:53
Permalink
Практическое задание №3
Ссылка на коммит
Firons
Sun, 11/22/2020 - 17:22
Permalink
Практическое задание №3
Решение.
NewDeveloper
Sat, 01/22/2022 - 12:16
Permalink
Практическое задание №3
Изменение 3