Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с авторизацией, Работает криво 
V
    Опции темы
OutlawZ
  Дата 26.10.2009, 00:55 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Привет, попробовал по совету сделать авторизацию с помощью сесии, но у меня проблема большая так как я не когда не делал данного кода.

Код файла auth.php
Код

 include("config.php"); #Подключаю файл для связи с бд
 session_start();          #Начинаем сессию
 db_connect();             #Связь с БД
 $query = "SELECT * FROM user";    #Запрос к базе
 $result = mysql_query($query) or die (mysql_error()); 
 
 $logged = 0; #Переменная доступа

if(isset($_POST['aut']))
{
 
 $_SESSION['username'] = $_POST['user'];
 $_SESSION['password'] = md5($_POST['pass']);
}

Получаем из БД пароли и логины 
 while($shell = mysql_fetch_array($result))
 { 
  if(($_SESSION['username'] == $shell[login]) and ( $_SESSION['password'] === $shell[password]))
  {
   $logged = 1; #Если все правильно то ставим 1
  }else{
   $logged = 0; #Если нет то стоим на месте
  } 
 }

#Если 0 то выводим форму авторизации 
if($logged == 0){
 print("<caption>Авторизация:</caption>
        <form method='post'>
        <table border='0' width='20%'>
        <tr><td>Login:</td><td><input type='text' name='user'></td></tr>
        <tr><td>Password:</td><td><input type='password' name='pass'></td></tr>
        </table>
        <input type='submit' name='aut' value='Авторизация'>
        </form>
       ");
}
 

Я понимаю что код страшный но с чего то начинать надо, но это еще не все, вот:

index.php
Код

include("auth.php"); #Подключаем файл с авторизации
 
 if(!$logged == 1) die; #Если не были авторизированы то убить и вывести форму с авторизации

#Если все хорошо то вывести форму регистрации
 print("<caption>Регистрация:</caption>
        <form method='post'>
        <table width='20%'>
        <tr><td>Login:</td><td><input type='text' name='login'></td></tr>
        <tr><td>Password:</td><td><input type='password' name='paswd'></td></tr>
        </table>
        <input type='submit' name='reg' value='Регистрация'>
        </form>
       ");
       
Добавить нового пользователя:
 if(isset($_POST['reg']))
 {
  $sh = md5($_POST['paswd']);
  $query = "INSERT INTO user(login,password) VALUES ('$_POST[login]','$sh')";
  mysql_query($query) or die (mysql_error());
  print("Пользователь добавлен!");
 }


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

Это черновой вариант я конечно не проверяю пока переменные на символы и т.д но я это все сделаю когда с механизм отлажу. 

Помогите указать на ошибки прошу и почему заного просит авторизироваться? Просто когда я указываю логин и пароль в файле и сравниваю их то все нормально работает, как только решил работать с БД появились такие вот косяки.


--------------------
user posted image
user posted image
PM MAIL   Вверх
NLspieler
Дата 26.10.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Вытаскивать из БД данные всех юзеров - это очень не рационально. И видимо в этом и заключается причина ошибки.

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

Код

<?
include("config.php"); #Подключаю файл для связи с бд
session_start();       #Начинаем сессию
db_connect();          #Связь с БД

 
$login = trim (  stripslashes($_POST['user'])  ) ; #Удаляем лишние пробелы в логине, отменяем слеши
$password = md5  (  stripslashes($_POST['pass'])  ) ; #Отменяем слеши, вычисляем md5     

#Составляем запрос - шаблон. %s - места для переменных
$sql = "SELECT count(*)
        FROM `user` 
        WHERE `login` LIKE '%s'
        AND `password` LIKE '%s'" ; 
#Скажи количество, записей, в которых логин равен ... и пароль равен ...


#Подставляем необходимые переменные в запрос, при этом заодно применяем функцию защиты от иньекций        
$query = sprintf ( $sql , mysql_real_escape_string($login) , mysql_real_escape_string($password) ) ;

#Отсылаем запрос, помещаем ответ в переменную $antwort
$antwort = mysql_query ($query) ;

#Пропускаем через функцию обработки. Строка у нас одна, поэтому цикл не требуется
$antwort = mysql_fetch_assoc ($antwort) ;

#Получаем количичество записей, в которых и пароль и логин совпадают с введенными пользователем. 
$count = $antwort['count'] ;

if ($count == 1) #Если есть совпадение, то заносим имя юзера в переменную сессион
{
    $_SESSION['login'] = $login ;
}
else #иначе
{
    #Выдаем сообщение об ошибке, требуем повторить ввод логина и пароля.
}
?>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.