Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
Всем привет. Работа с php у меня не так уж и давно. Но всё есть какие то продвижения, сделал простейший калькулятор. теперь решил сделать блог. Очень простой, для получения лучших знаний. есть пару вопросов:
1. Я делаю блог с админкой. В ней хочу сделать
добавление новости. Так вот, хочу сделать время
добавления новости. Как это правильно делается?
Просто заносить текущие время в переменную, а её
заносить уже в базу данных?
2. Как сделать защиту для админки, чтоб доступ
был только у меня одного? И нельзя было просто
перейти по сслылки.
3. Что за не понятные символы в адресной
строке? ?= и т.д.
Заранее спасибо.
teddy
Отправлено: 08 Июля, 2013 - 21:29:03
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
назгул пишет:
Просто заносить текущие время в переменную, а её
заносить уже в базу данных?
Да. Функция называется date() - на всякий случай.
Можно ещё использовать UNIX_TIMESTAMP() при добавление данных в БД и форматировать при выводе с помощью функции date() - но это лучше оставить на будущее... сделайте пока минимум. Разница будет в том, что когда вы к примеру напишите date("d-m-Y H:i:s"); - то в БД отправится строка, которую вы не сможете отформатировать(изменить отображение даты(разве что дерактировать через БД вручную для каждой заметки, что не очень удобно). Но для начала вполне сойдет
назгул пишет:
Как сделать защиту для админки, чтоб доступ
был только у меня одного?
Сделайте доступы по ролям и при авторизации проверяйте, если это админ, показываем админку, если нет, тогда пользовательскую часть.
По поводу прямой ссылки, можно так же на странице админки сделать проверку, если нет к примеру сессии с ролью, которая должна быть только у админа, то делаем редирект на главную страницу, например.. или просто die()...
назгул пишет:
Что за не понятные символы в адресной
строке?
Это $_GET параметры. Если к примеру вы получаете данные из формы методом $_POST и атрибут name инпута автоматически становится ячейкой глобильного массива $_POST, в ссылке то, что идет после вопроса становится ячейкой массива $_GET(так будет легче понять).
Простой пример <a href="index.php?logout">Выход</a>
В данном случае мы получаем возможность использовать этот параметр. Тоесть получаем $_GET['logout']. Например в данном случае можно проверить на isset.
Значение role должно храниться в БД и при авторизации должно записываться в сессию. Обычно роли обзывают цифрами. Например 0 - обычный пользователь, 1 модератор, 2 администратор...
Тоесть получается так - если значение в сессии, которая отвечает за роли пользователей в проекте НЕ равно admin, тогда отправляем пользователя на главную страницу. Когда скрипт видит header("Location: *"); он всё бросает, и переходит по указанному адресу.
exit нужно ставить для того, что бы код, который идет после редиректа не отработал в холостую. Можно конечно и без exit, ошибок не будет. Но считается хорошим тоном его использовать.
Так же можно вместо того, что бы отправлять пользователя на главную страницу сделать так, что бы его перебросило туда, откуда он и пытался попасть в админку.
header("Location: ".$_SERVER['HTTP_REFERER']);
Изначально в коде вообще лучше было бы проверить на наличии сессии авторизованного пользователя для полного спокойствия. Тоесть алгоритм такой:
1. При авторизации пользователя в проекте смотрим его роль, если это админ, то показываем файл admin.php, если нет, тогда не показываем (if else).
2. Если авторизации не было вообще, соответственно роли не были выбраны, то так же "провожаем" левого пользователя из админки куда по дальше...
В первую очередь лучше проверить пункт номер 2...
AlexAnder
Отправлено: 09 Июля, 2013 - 10:45:51
Частый посетитель
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Помог: 34 раз(а)
Цитата:
Notice: Undefined index: HTTP_REFERER in Z:\home\test1.ru\www\admin.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\index.php:2) in Z:\home\test1.ru\www\admin.php on line 2
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
teddy, т.е. в БД надо сделать ещё 1 дополнительное поле для этого парамерты пользователя (для: 0, 1, 2,и т.д.)
А как это будет делаться при регистрации? Как это будет определяться, что это обычный пользователь? Или из начально все обычные пользователи?
teddy
Отправлено: 09 Июля, 2013 - 10:53:21
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
AlexAnder
Значит дело было после любого вывода в браузер ) А так пользователя отправит туда, откуда пришел... Если приходил по прямой ссылки, то редирект сработает на главную страницу сайта (Добавление) назгул
Ну если сессии с ролями нет вообще, тогда это гости... Если сессия есть - смотрим какой она роли )
В момент авторизации мы ведь сверяем логин и пароль которые ввел пользователь с теми что в БД, ведь так? Паралельно нужно ещё выбрать role, но ни с чем не сверять его.. А сделать следующее: если логин и пароль совпали, тогда уже использовать роль выбранную из БД...
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
teddy, Сейчас буду пробовать! Спасибо!
teddy
Отправлено: 09 Июля, 2013 - 11:02:46
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
назгул пишет:
А как это будет делаться при регистрации?
Очень просто ) создайте в БД role типа INT. При регистрации оно всегда будет равно 0. Соответственно цифра 0 будет приниматься как "обычный пользователь" Но... если вы захотите сменить роль какому нибудь пользователю, тогда редактируйте через БД вручную роли - но это конечно же для начала. В дальнейшем можно и нужно будет сделать админку для присваивания ролей пользователям
А так пользователя отправит туда, откуда пришел... Если приходил по прямой ссылки, то редирект сработает на главную страницу сайта
я тебе про то что кто делает пользователям на сайте ссылки на админку?О_О она же видна только админам, а если пользователь вобьёт в адресную строку и клацнет ентер то и привет
Цитата:
Notice: Undefined index: HTTP_REFERER in Z:\home\test1.ru\www\admin.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\index.php:2) in Z:\home\test1.ru\www\admin.php on line 2
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
AlexAnder пишет:
я тебе про то что кто делает пользователям на сайте ссылки на админку?О_О она же видна только админам, а если пользователь вобьёт в адресную строку и клацнет ентер то и привет
Ничего не будет. Если запишет адрес в строку в клацнет энтер то сработает редирект.
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Помог: 34 раз(а)
teddy пишет:
запишет адрес в строку в клацнет энтер то сработает редирект
почему тогда у меня
Цитата:
Notice: Undefined index: HTTP_REFERER in Z:\home\test1.ru\www\admin.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\index.php:2) in Z:\home\test1.ru\www\admin.php on line 2
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
AlexAnder
Да не, я заметил одну особенность.. протестил сейчас через IE, всё нормально работает, а хром плюет на редирект... видимо здесь все зависит от особенностей браузера. Странно, но реально это так. В хроме даже при проверке на isset на наличие сессии даже в том случае, если её нет, выпадает ошибка которую ты указал выше. А IE делает редирект на главную страницу. Например site.ru/admin.php сработает редирект на site.ru(это в случае HTTP_REFERER)
AlexAnder пишет:
слишком толсто, есть типы поменьше
Экономим на спичках? ) Вполне удобно думаю. При регистрации не нужно создавать переменную которая будет содержать значение по умолчанию... Просто для каждого зарегистрированного пользователя role будет 0 и все.. А дальше уже работаем меняем при необходимости
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Помог: 34 раз(а)
Цитата:
Да не, я заметил одну особенность.. протестил сейчас через IE, всё нормально работает, а хром плюет на редирект... видимо здесь все зависит от особенностей браузера. Странно, но реально это так. В хроме даже при проверке на isset на наличие сессии даже в том случае, если её нет, выпадает ошибка которую ты указал выше. А IE делает редирект на главную страницу. Например site.ru/admin.php сработает редирект на site.ru
echoisset($_SERVER['HTTP_REFERER']) ? "redirect":"404: referer not found!";
в хроме всё нормально - пишет "404: referer not found!". это не JS - браузер не важен.
Цитата:
Экономим на спичках? )
Цитата:
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Очень малое целое число. Диапазон со знаком от -128 до 127. Диапазон без знака от 0 до 255.
Цитата:
INT[(M)] [UNSIGNED] [ZEROFILL]
Целое число нормального размера. Диапазон со знаком от -2147483648 до 2147483647. Диапазон без знака от 0 до 4294967295.
(Добавление)
1 байт и 4 байта - разница для пхп проектов то небольшая
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.