Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > авторизация - session


Автор: pshechka 2.5.2007, 01:25
Я делаю авторизацию с ролями.Т.е у каждого пользователя своя роль(0-обычный пользователь ,1-админ).Для каждой роли предназначена своя информация.ПРоблема в том, что когда я ввожу логин и пароль пользователя с ролью 1,он не определяет, что это-админ.Выводит мне --- зарегистрирован Обычный пользователь

Вот моя таблица(users) в MYSQLе:
Код

create table users (
id tinyint default '0' NOT NULL ,
login varchar ( 20 ) NOT NULL ,
pass varchar ( 20 ) NOT NULL ,
email varchar ( 40 ) NOT NULL ,
PRIMARY KEY ( login ) };



ВОТ ЗАПИСЬ В БД:
id login pass email 
1 admin 161291 Eugen@adsl.by 

Вот моя проверка ЛОГИНА И ПАРОЛя:
Код

<?php 
$db_name="users"; 
$table="users"; 
$host="localhost"; 
$user="root"; 
$pass="161291"; 
$link=mysql_connect($host,$user,$pass) or 
die(mysql_errno($link).mysql_error($link)); 
$db=mysql_select_db($db_name,$link) or 
die(mysql_errno($link).mysql_error($link)); 
$login=$_POST['login']; 
$pass=$_POST['pass']; 
$sqlquery = "select * From users WHERE login = \"$login\""; 
$result=mysql_query($sqlquery, $link) or 
die(mysql_errno($link).mysql_error($link)); 
$data=mysql_fetch_array($result); 
if ($login==$data[1] && $pass==$data[2]){ 
session_start(); 
$_SESSION['is_logged'] = TRUE; 
$_SESSION['user_role'] = $data[0]; 
header('Location: admin.php'); 
} 
else { 
echo ("Неверный логин или пароль");} 
exit(); 


//А ЭТО СТРАНИЧКА РАСПРЕДЕЛЕНИЯ РОЛЕЙ(admin.php):

<?php 
if((!isset($_SESSION['is_logged'])) || ($_SESSION['is_logged']==TRUE)){ 
echo ("ЗАрегистрирован"); 
if($_SESSION['user_role']==1){ 
echo ("АДМИН");} 
else { 
echo ("Обычный пользователь");} 
} 
else { 
echo ("НЕ ЗАРЕГиСТРИРОВАН"); 
} 
?> 




//Но ерунда в том, что если я меняю : 
if((!isset($_SESSION['is_logged'])) || ($_SESSION['is_logged']==TRUE)){
echo ("принимает регистрацию");
if($_SESSION['user_role']==0){
echo ("АДМИН");}
else {
echo ("Обычный пользователь");}
}
else {
echo ("НЕ ЗАРЕГЕСТРИРОВАН");
}
ТО пишет------зарегистрирован АДМИН.Значит ошибка в том, что сессия не правельно записывает значение роли, или не правельно его забирает. 


ПОМОГИТЕ ПЛИЗ.БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН.    smile 

 ! 
PARROT
Пользуемся кнопкой КОД


Автор: cardinal 2.5.2007, 01:41
Модератор: Название темы должно отражать ее суть!

Автор: SelenIT 2.5.2007, 01:56
pshechka, а кто будет в страничке распределения ролей сессию стартовать, чтоб считать из неё хоть что-либо - Пушкин, что ли?

А так у Вас сначала срабатывает условие !isset($_SESSION['is_logged']) и на этом первая проверка заканчивается (кстати, по логике скрипта условие явно неправильное, должно быть как раз isset и && вместо ||) и скрипт заходит в первый if. А $_SESSION['user_role'], соответственно, тоже не определена, что при нестрогом сравнении (==, а не ===) даёт тот же false, что и 0 - поэтому результатом сравнения оказывается true...

Автор: pshechka 2.5.2007, 15:20
Цитата(SelenIT @ 2.5.2007,  01:56)
pshechka, а кто будет в страничке распределения ролей сессию стартовать, чтоб считать из неё хоть что-либо - Пушкин, что ли?

А так у Вас сначала срабатывает условие !isset($_SESSION['is_logged']) и на этом первая проверка заканчивается (кстати, по логике скрипта условие явно неправильное, должно быть как раз isset и && вместо ||) и скрипт заходит в первый if. А $_SESSION['user_role'], соответственно, тоже не определена, что при нестрогом сравнении (==, а не ===) даёт тот же false, что и 0 - поэтому результатом сравнения оказывается true...

Т.е должно быть так?:
Код

<?php 
session_start();
if((!isset($_SESSION['is_logged'])) && ($_SESSION['is_logged']==TRUE)){ 
echo ("ЗАрегистрирован"); 
if($_SESSION['user_role']===1){ 
echo ("АДМИН");} 
else { 
echo ("Обычный пользователь");} 
} 
else { 
echo ("НЕ ЗАРЕГиСТРИРОВАН"); 
} 
?> 

Я ВАС ПРАВЕЛЬНО ПОНЯЛ?

Автор: SelenIT 2.5.2007, 16:20
pshechka, имхо как-то так:
Код

<?php 
session_start();
if(!empty($_SESSION['is_logged'])){ // так короче, чем (isset($_SESSION['is_logged']) && $_SESSION['is_logged']) :)
    echo ("Зарегистрирован ");
    if($_SESSION['user_role']==1){ 
        echo ("АДМИН");} 
    else { 
        echo ("Обычный пользователь");} 
    }
}
else { 
    echo ("НЕ ЗАРЕГИСТРИРОВАН"); 
} 
?> 

Автор: pshechka 3.5.2007, 00:13
Если я захожу не по форме авторизации, а просто сразу ввожу адресс проверки введенных данных, то он пишет :
ЗАрегистрированОбычный пользователь.ЧТо надо дописать, чтобы он не присваивал автоматом никаких значений???

Автор: dimcat 15.5.2007, 12:08
Сделай для пользователя ключ 1, для админов 2, а 0, который по умолчанию будет для неподтвердивших регистрацию... И пусть себе присваивает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)