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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Первый день новичка
назгул
Отправлено: 08 Июля, 2013 - 21:08:47
Post Id


Новичок


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


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




Всем привет. Работа с php у меня не так уж и давно. Но всё есть какие то продвижения, сделал простейший калькулятор. теперь решил сделать блог. Очень простой, для получения лучших знаний. есть пару вопросов:

1. Я делаю блог с админкой. В ней хочу сделать
добавление новости. Так вот, хочу сделать время
добавления новости. Как это правильно делается?
Просто заносить текущие время в переменную, а её
заносить уже в базу данных?
2. Как сделать защиту для админки, чтоб доступ
был только у меня одного? И нельзя было просто
перейти по сслылки.
3. Что за не понятные символы в адресной
строке? ?= и т.д.
Заранее спасибо.
 
 Top
teddy
Отправлено: 08 Июля, 2013 - 21:29:03
Post Id


Участник


Покинул форум
Сообщений всего: 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.

PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_GET['logout']))
  3. {
  4.     unset($_SESSION['user']);
  5.     header("Location: index.php");
  6.     exit;
  7. }
  8.  

Так же $_GET параметров может быть несколько. name=value&name=value - но не до бесконечности... Лимит есть, ноот точную цифру не помню

(Отредактировано автором: 09 Июля, 2013 - 02:10:47)

 
 Top
назгул
Отправлено: 09 Июля, 2013 - 10:06:44
Post Id


Новичок


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


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




teddy, Блин спасибо тебе большое! Хорошо обьяснил всё и без лишних слов. Как принято на большинства форумах. Спасибо ещё раз!

Но вот только не совсем понял про админку. Можешь как ни будь поподробнее обьяснить этот вопрос?!

Заранее спасибо!
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 10:38:23
Post Id


Участник


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


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




назгул
Да лан, пустяки ) Мне тоже ребята помогают здесь )

назгул пишет:
Но вот только не совсем понял про админку


Допустим у нас есть файл, где лежит код отвечающий за админку, пусть он назвается admin.php. В нем мы можем сделать соответствующую проверку:

PHP:
скопировать код в буфер обмена
  1. if($_SESSION['role'] != "admin")
  2. {
  3.     header("Location: index.php");
  4.     exit;
  5. }


Значение role должно храниться в БД и при авторизации должно записываться в сессию. Обычно роли обзывают цифрами. Например 0 - обычный пользователь, 1 модератор, 2 администратор...

Тоесть получается так - если значение в сессии, которая отвечает за роли пользователей в проекте НЕ равно admin, тогда отправляем пользователя на главную страницу. Когда скрипт видит header("Location: *"); он всё бросает, и переходит по указанному адресу.

exit нужно ставить для того, что бы код, который идет после редиректа не отработал в холостую. Можно конечно и без exit, ошибок не будет. Но считается хорошим тоном его использовать.

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

header("Location: ".$_SERVER['HTTP_REFERER']);

Изначально в коде вообще лучше было бы проверить на наличии сессии авторизованного пользователя для полного спокойствия. Тоесть алгоритм такой:
1. При авторизации пользователя в проекте смотрим его роль, если это админ, то показываем файл admin.php, если нет, тогда не показываем (if else).

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

В первую очередь лучше проверить пункт номер 2...
 
 Top
AlexAnder
Отправлено: 09 Июля, 2013 - 10:45:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 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

(Отредактировано автором: 09 Июля, 2013 - 10:47:32)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
назгул
Отправлено: 09 Июля, 2013 - 10:52:20
Post Id


Новичок


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


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




teddy, т.е. в БД надо сделать ещё 1 дополнительное поле для этого парамерты пользователя (для: 0, 1, 2,и т.д.)
А как это будет делаться при регистрации? Как это будет определяться, что это обычный пользователь? Или из начально все обычные пользователи?
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 10:53:21
Post Id


Участник


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


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




AlexAnder
Значит дело было после любого вывода в браузер ) А так пользователя отправит туда, откуда пришел... Если приходил по прямой ссылки, то редирект сработает на главную страницу сайта
(Добавление)
назгул
Ну если сессии с ролями нет вообще, тогда это гости... Если сессия есть - смотрим какой она роли )

В момент авторизации мы ведь сверяем логин и пароль которые ввел пользователь с теми что в БД, ведь так? Паралельно нужно ещё выбрать role, но ни с чем не сверять его.. А сделать следующее: если логин и пароль совпали, тогда уже использовать роль выбранную из БД...

PHP:
скопировать код в буфер обмена
  1. if($login == $row['login'] and $password == $row['password'])
  2. {
  3.     $_SESSION['roles'] = $row['role'];
  4.     //как то так
  5. }


Кстати AlexAnder верно заметил. Забыл добавить, что редирект следует делать ДО любого вывода в браузер... А то будет ошибка

(Отредактировано автором: 09 Июля, 2013 - 11:08:35)

 
 Top
назгул
Отправлено: 09 Июля, 2013 - 10:59:49
Post Id


Новичок


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


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




teddy, Сейчас буду пробовать! Спасибо!
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 11:02:46
Post Id


Участник


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


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




назгул пишет:
А как это будет делаться при регистрации?

Очень просто ) создайте в БД role типа INT. При регистрации оно всегда будет равно 0. Соответственно цифра 0 будет приниматься как "обычный пользователь" Улыбка Но... если вы захотите сменить роль какому нибудь пользователю, тогда редактируйте через БД вручную роли - но это конечно же для начала. В дальнейшем можно и нужно будет сделать админку для присваивания ролей пользователям

(Отредактировано автором: 09 Июля, 2013 - 11:07:31)

 
 Top
AlexAnder
Отправлено: 09 Июля, 2013 - 11:12:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


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




teddy пишет:
AlexAnder
Значит дело было после любого вывода в браузер )

ну где ж там вывод
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Location: ".$_SERVER['HTTP_REFERER']);
  3. ?>

Цитата:
А так пользователя отправит туда, откуда пришел... Если приходил по прямой ссылки, то редирект сработает на главную страницу сайта

я тебе про то что кто делает пользователям на сайте ссылки на админку?О_О она же видна только админам, а если пользователь вобьёт в адресную строку и клацнет ентер то и привет
Цитата:
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

PHP:
скопировать код в буфер обмена
  1. isset($_SERVER['HTTP_REFERE']) ? code : null;

(Добавление)
Цитата:
role типа INT

горесовет

(Отредактировано автором: 09 Июля, 2013 - 11:15:23)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 11:20:07
Post Id


Участник


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


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




AlexAnder пишет:
я тебе про то что кто делает пользователям на сайте ссылки на админку?О_О она же видна только админам, а если пользователь вобьёт в адресную строку и клацнет ентер то и привет


Ничего не будет. Если запишет адрес в строку в клацнет энтер то сработает редирект.
AlexAnder пишет:
горесовет

Аргументируй Улыбка

(Отредактировано автором: 09 Июля, 2013 - 11:23:36)

 
 Top
AlexAnder
Отправлено: 09 Июля, 2013 - 11:24:11
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 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

потомучто денвер? Огорчение

Цитата:
AlexAnder пишет:
горесовет

Аргументируй Улыбка

слишком толсто, есть типы поменьше


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 11:31:46
Post Id


Участник


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


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




AlexAnder
Да не, я заметил одну особенность.. протестил сейчас через IE, всё нормально работает, а хром плюет на редирект... видимо здесь все зависит от особенностей браузера. Странно, но реально это так. В хроме даже при проверке на isset на наличие сессии даже в том случае, если её нет, выпадает ошибка которую ты указал выше. А IE делает редирект на главную страницу. Например site.ru/admin.php сработает редирект на site.ru(это в случае HTTP_REFERER)

AlexAnder пишет:
слишком толсто, есть типы поменьше

Экономим на спичках? ) Вполне удобно думаю. При регистрации не нужно создавать переменную которая будет содержать значение по умолчанию... Просто для каждого зарегистрированного пользователя role будет 0 и все.. А дальше уже работаем меняем при необходимости

P.S: у меня тоже денвер )

(Отредактировано автором: 09 Июля, 2013 - 11:36:46)

 
 Top
AlexAnder
Отправлено: 09 Июля, 2013 - 11:39:03
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


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




Цитата:
Да не, я заметил одну особенность.. протестил сейчас через IE, всё нормально работает, а хром плюет на редирект... видимо здесь все зависит от особенностей браузера. Странно, но реально это так. В хроме даже при проверке на isset на наличие сессии даже в том случае, если её нет, выпадает ошибка которую ты указал выше. А IE делает редирект на главную страницу. Например site.ru/admin.php сработает редирект на site.ru

что за бред
PHP:
скопировать код в буфер обмена
  1. echo isset($_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 байта - разница для пхп проектов то небольшая


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
teddy
Отправлено: 09 Июля, 2013 - 11:44:39
Post Id


Участник


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


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




AlexAnder пишет:
что за бред

Это не бред... Я говорю то, что вижу своими глазами у себя на машине...

AlexAnder пишет:
в хроме всё нормально - пишет "404: referer not found!"

А у меня наоборот, пользователь получает доступ к файлу... Странная ситуация ))

Вообщем что бы не париться проще сделать редирект на главную страницу и все будет работать без лишних заморочек...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB