Доброго времени суток! У меня есть задача - сделать систему доступа "юзер заходит на сайт, вводит логин-пароль и взависимости от его логин-пароля его перекидывает на определенную сраницу", т.е. есть, например, 3 прайса с разными ценами, есть, например, 9 юзеров, есть 3 группы, которые определяют какой прайс для какого юзера. Данную задачу я реализовал, но т.к. по php я не профи прошу вас помощи - как мне мой код реализовать через массив. Вот мой код: 1. Файл логинов и паролей pass.php PHP: <? $logname = юзер1; $logname1 = юзер2; $logname2 = юзер3; $logname3 = юзер4; $logname4 = юзер5; $logname5 = юзер6; $logname6 = юзер7; $logname7 = юзер8; $logname8 = юзер9; $password = пароль1; $password1 = пароль2; $password2 = пароль3; $password3 = пароль4; $password4 = пароль5; $password5 = пароль6; $password6 = пароль7; $password7 = пароль8; $password8 = пароль9; ?> 2. Собственно файл авторизации login.php PHP: include ("pass.php"); global $log; global $pass; function login() { include ("pass.php"); global $log; global $pass; echo "<form method=POST action=admin2.php?auth=view> <p>Введите пароль:</p> <p><input type='text' name='log' size='20' value='$log'></p> <p><input type='password' name='pass' size='20' value='$pass'></p> <input type='submit' value='Вход'> </form>"; } function view() { include ("pass.php"); global $log; global $pass; if ($pass != null) { switch ($pass) { case $pass == $password: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password1: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password2: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password3: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password4: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password5: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password6: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password7: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $password8: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; default: echo ("Неправильный пароль или логин!"); } } else { echo "Неправильный пароль или логин!"; } } switch ($auth) { case "view": view(); break; default: login(); break; } ?> Пробовал делать массив логин и паролей: PHP: $name = array(1 => "юзер1", "юзер2", "юзер3", "юзер4"); $par = array(1 => "пароль1", "пароль2", "пароль3", "пароль4"); и обрабатывать их так: PHP: for ($counter=1; $counter<5; $counter++) { if (($_POST['name'][$counter] == $log) && ($_POST['par'][$counter] == $pass)) { switch ($pass) { case $pass == $par[1]: header('Refresh: 3; URL=http://www.pp.ru/150509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $par[2]: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $par[3]: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; case $pass == $par[4]: header('Refresh: 3; URL=http://www.pp.ru/140509.xls'); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; break; default: echo ("Неправильный пароль или логин!"); } } else { echo "Неправильный пароль или логин!"; } } Но так не работает, и как мне реализовать группы - представить не могу. Помогите, кому не лень пожалуйста.
я бы сделал маленькую бд с такой структурой: таблица users: user_id | user_name | user_pass | group_id 1 | Вася | 123 | 33 2 | Петя | 456 | 44 таблица user_groups: group_id | group_name | price_type 44 | Одмины | file-a.xls 33 | Юзеры | file-b.xls алгоритм. Вводим логин и пасс находим по этим данным значение поля group_id [sql] select group_id from users where name=$name and pass=$pass [/sql] получаем переменную $group_id [sql]select price_type from user_groups where group_id=$group_id [/sql] получили $price_type а этот price_type можно подсунуть в редирект. этот пример не идеален, но для решения задачи вполне сойдет. можно сделать и на массивах, то так мне кажется намного удобнее и понятнее.
а вот пример без mysql. PHP: <?php $redirect['Пользователь1']['Пароль1']='1.xls'; $redirect['Пользователь2']['Пароль2']='2.xls'; $redirect['Пользователь3']['Пароль3']='3.xls'; $login = $_POST['login']; $pass = $_POST['pass']; header('Refresh: 3;'.$redirect[$login][$pass]); echo 'Через 10 сек. вы будете перенаправлены на новую страницу.'; exit; ?> разумеется, надо будет доделать проверку на наличие учетной записи и правильность пароля. тут поможет функция array_key_exists().
El Loco, спасибо что помогаешь! Меня заинтересовал твой вариант с бд. Я правильно понимаю PHP: $z = mysql_query("SELECT group_id FROM users WHERE users_name='$log'", $link_id); $z - это содержимое поля group_id и если я например попрошу пхп вывести мне на экран $z, он мне выведед id конкретной записи???
С $z я вроде как разобрался: PHP: $link_id = db_connect(); $z = mysql_query("SELECT group_id FROM users WHERE user_name='$log'", $link_id); while($query_data1 = mysql_fetch_row($z)) { $zz = "$query_data1[0]"; echo "$zz"; } Он мне показывает id группы для введенного логина, но когда пробую создать условие для этого номера - получается фигня: PHP: if($zz == 2) { echo "GOOD"; } else { echo "BAD"; } } Он мнея всегда пишет BAD хотя на строчку выше он пишет для введенного логина id = 2 ...
А сели в условии поставить вмето == обратное <>, то выводит GOOD. Т.е. результат условия показывает, что id группы = 2 не равно 2...
Сообразил, у меня переменная $zz не передавалась в условие после цикла, тока не понимаю теперь как ее передать
я не знаю как у тебя все организовано. все можно оформить одним файлом. там и городить особо нечего. должно быть что-то типа этого: PHP: <? // ... // подключение к бд // ... $z = mysql_query("SELECT group_id FROM users WHERE user_name='$log' LIMIT 0,1"); if(mysql_num_rows($z)>0) { $query_data1 = mysql_fetch_row($z)) $zz = "$query_data1[0]"; echo "$zz"; } else echo 'Запрос вернул пустой результат!'; if($zz == '2') echo "GOOD"; else echo "BAD"; ?> я тебе в принципе алгоритм написал. там ничего сложного. там даже можно одним запросом обойтись вместо двух. но я привел простой пример, чтобы было понятно, что откуда берется и передается.
В итоге я сделал вот так: PHP: <?php include "./common_db.inc"; $link_id = db_connect(); $z = mysql_query("SELECT * FROM users WHERE user_name='$log' AND user_pass='$pass'", $link_id); while($query_data2 = mysql_fetch_row($z)) { $login = "$query_data2[1]"; $password = "$query_data2[2]"; $group = "$query_data2[3]"; // echo "Логин - $login<br>Пароль - $password<br>Группа - $group<br>"; } if($login == $log && $password == $pass) { $q = mysql_query("SELECT * FROM users_groups WHERE group_id='$group'", $link_id); while($query_data1 = mysql_fetch_row($q)) { $zz = "http://www.pp.ru/$query_data1[2]"; header ("Refresh: 3; URL=$zz"); echo 'Скачивание начнется через 10 секунд.'; exit; } } else { echo "Неверный логин или пароль"; } echo "<form method=POST action=log.php> <p>Введите пароль:</p> <p><input type='text' name='log' size='20' value='$log'></p> <p><input type='password' name='pass' size='20' value='$pass'></p> <input type='submit' value='Вход'> </form>"; ?> Все супер. Только вот один вопрос остался. Когда я создавал БД, то поле с паролем я решил шифровать в MD5. И при авторизации не принимает пароль. Как решить эту проблемку? P.S. Для El Loco Спасибо!!!
пару замечаний. цикл while вызывать в данном случае некрасиво, так как ты не перебираешь несколько строк. я в первом запросе добавил "LIMIT 0,1". это должно говорить о том, что запрос вернет одну строку. функция mysql_fetch_row вернет тебе один ряд. поэтому достаточно проверить, что запррос вернул ненулевой результат, и воспользоваться фукцией mysql_fetch_row. и в конце ты выводишь хтмл-код формы командой echo. это тоже некрасиво. достаточно перед этим закрыть пхп-код тегом ?> и вставить код формы в исходном виде. и я не понял зачем ты в форме пишешь HTML: value='$pass' и HTML: value='$log' если и выводят строку вперемешку с переменными, то принято соединять их точкой. PHP: <? $string = 'начало' . $my_var . 'продолжение'; ?> в твоем случае я не знаю, зачем ты так делаешь.