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 Форумы портала PHP.SU :: Версия для печати :: Моя авторизация. Насколько хорошо?
mysql_connect("localhost","root",") or die ("Ошибка!");
mysql_select_db ("datebase") or die ("Ошибка!");
$query = "SELECT * FROM users WHERE name ='$name'";
$result = mysql_query ($query);
if (mysql_numrows($result) != 1)
{
header ("Location: index.php");
exit;
}
else
{
$res=mysql_fetch_array($result);
$admin = $res['admin'];
if($admin != 'y')
{
header ("Location: index.php");
exit;
}
}
?>
(Добавление) Целесобразно ли в таблице users у каждого юзаря создавать два поля 'admin' & 'moder'. Которые имеют два значения y OR n, что сответственно означает принадлежность юзаря к тем или иным.
Помогите баги выявить в скриптах. (Добавление)
( если они есть )
Если пользователь он админ, он имеет так же права модера, так?
Лучше сделай одно поле, status (или подобное), которое будет ENUM, и будет выбор либо обычный пользователь, либо модератор либо администратор. Так, имхо, целесобразней.
ENUM - тип данных, которое задает, что значение поля может иметь только одно из указанных значений. К примеру:
status ENUM('user', 'moder', 'admin', 'banned')
?
Зачем постоянно перелавать через GET sid польнователя? Это: 1. не безопасно (имхо). 2. не красиво. Кроме того, в каком-нибуть месте забудете поставить нужный адресс, и все, доступ будет потерян.
Лучше храните sid пользователя в базе данных, и просто сравнивать, если sid в сессии равен sid в бд, и если нет - выкидывать юзера.
Срок бана лучше указать в отдельном поле в таблице юзверей.
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 32 ) NOT NULL ,
`sid` VARCHAR( 32 ) NOT NULL ,
`date` DATETIME NOT NULL DEFAULT '00.00.00 00:00'
) ENGINE = MYISAM ;
Скорее всего, как я понимаю, мне надо будет проверять при каждом заходе время открытия сессии с текущим временем и удалять, те которые допустим были открыты более 30 минут (допустим), и закрывать их?