Упрощенние кода авторизации

friend123

Guest
Упрощенние кода авторизации

Я хочу сделать многоуровневую автоизацию пользователей через БД Mysql. Есть 3 группы, в каждой из них по 3 подгруппы. Я чувствую, что делаю неправильно: пытаюсь с помощью операторов if else делать сравнения. Все конечно работает, но уж очень загроможденный код получается. Есть ли способ упростить его?
 

Dallas

Guest
Слишком обще описал проблему. Как можно судить о том, можно ли упростить твой код, если ты даже принцип его работы не показал, не то что его самого!?
 

friend123

Guest
<?php

IF($event=="login"){

$query = "SELECT * FROM $usertable";
$result = MYSQL_QUERY($query);
WHILE ($row = mysql_fetch_assoc($result)){
$userlogin=$row['login'];
$userpass=$row['password'];
IF($userpass==$pass && $userlogin==$login){
$group=$row['group'];
$div=$row['div'];
$auth=true;
IF($group=='a'){
IF($div=='a'){
PRINT "A";
exit();
} elseif ($div=='b'){
PRINT "B";
} elseif ($div=='c'){
PRINT "C";
}
} elseif($group=='b'){
IF($div=='a'){
PRINT "A";
exit();
} elseif ($div=='b'){
PRINT "B";
} elseif ($div=='c'){
PRINT "C";
}
} elseif($group=='c'){
IF($div=='a'){
PRINT "A";
exit();
} elseif ($div=='b'){
PRINT "B";
} elseif ($div=='c'){
PRINT "C";
}
}}}}
?>

<FORM ACTION="auth.php?event=login" method="POST">
Логин:&nbsp;&nbsp;<INPUT name="login" size="15"><BR>
Пароль:&nbsp;<INPUT type=password name="pass" size="15"><P>
<INPUT type="submit" value="Войти">
</FORM>
 

Dallas

Guest
Чтобы не выстраивать такой цикл, нужно переделать базу. Смысл такой, что ты получаешь данные авторизации и по ним ищешь в базе все, что тебе надо.
В сравнении на первом месте ставь значение, а потом переменную - так ты обезопасишь себя от ошибочного присваивания (вместо $foo == "bar" пиши "bar" == $foo, чтобы не получить $foo = "bar")
 

friend123

Guest
Но у меня такая фишка, что у каждой подгруппы в каждой группе есть уникальный переход на другие страницы, т.е. всего 9 переходов с помощью header("Location")
 

Dallas

Guest
Хоть я и не вник в структуру (ты ее так и не описал), но уверен, что все это можно прописать в БД.
 

Buteo

[CDR/DVP]
для начало вот эту часть переделать!!!:
PHP:
$query = "SELECT * FROM $usertable";
$result = MYSQL_QUERY($query);
WHILE ($row = mysql_fetch_assoc($result)){
$userlogin=$row['login'];
$userpass=$row['password'];
IF($userpass==$pass && $userlogin==$login){
см. http://detail.phpclub.ru/article/page_password1
 

friend123

Guest
Кратко поясню структуру:
Группа a, в нее входят подгруппы a, b, с
Группа b, в ней подгруппы a, b, c
Группа c, в ней подгруппы a, b, c

Мне надо проверить каждую подгруппу, находящююся в группе и в соответствии с введенным логином и паролем (введенный логин и пароль сравниваются в базе и если совпадают, то им присваивается группа a, b или c, и соостветственно логину и паролю присваивается подгруппа, которые хранятся в базе) происходит проверка. При совпадении меня перекидывает на уникальную страницу для каждой подгруппы в группе

-~{}~ 27.08.04 12:37:

Originally posted by Buteo
для начало вот эту часть переделать!!!:
PHP:
$query = "SELECT * FROM $usertable";
$result = MYSQL_QUERY($query);
WHILE ($row = mysql_fetch_assoc($result)){
$userlogin=$row['login'];
$userpass=$row['password'];
IF($userpass==$pass && $userlogin==$login){
см. http://detail.phpclub.ru/article/page_password1
А что там неправильного?
 

friend123

Guest
Так как их выбрать, ведь надо узнать какой логин и пароль был введен. Я делаю перебором записей, но как-то можно организовать поиск
 

MD

Guest
friend123
молодой человек вам слово WHERE говорит что-нибудь в SQL? :)
 

friend123

Guest
блин, неужто забыл? Ну ладно исправлю, но все равно как быть с переходом?
 

Фанат

oncle terrible
Команда форума
Переход делается тоже средствами mysql
заводишь таблицу с правами и по ней смотришь, какие у кого правад.

Другое дело, что "переход с помощью header("Location")" имеет такое же отношение к авторизации, как чайная церемония к подводной охоте.
 

Buteo

[CDR/DVP]
Нужны две таблицы
user{id, login, password, group_id}
group{id, parent, url}

url - куда переходить
parent - id группы у подгруппы

запрос будет где-то такой
PHP:
SELECT g.url FROM user u, group g, group g2
 WHERE u.login = '".$_POST['login']."'
      AND u.password = '".$_POST['password']."'
      AND g.id = u.group_id
      AND g2.id = g.parent
 
Сверху