Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 06:52   #1
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию Аутентификация пользователя через php и mysql

Здравствуйте.
PHP и MySQL начал недавно заниматься. Делаю сайт с аутентификацией пользователей через MySQL. База есть 'suite', таблица 'users' с полями login,password.
PHP код:
<?php
    $db_connect 
= @mysql_connect("localhost""root"""); 
    
mysql_select_db("suite");
    
    
$res mysql_query('SELECT * FROM users');
    
$count mysql_num_rows($res);
        
    for (
$i 0$i $count$i++) {
        if ((
$_POST['login'] == mysql_result($res$i"login")) && ($_POST['passw'] == mysql_result($res$i"password"))) {        
            
$enter_login mysql_result($res$i"login");
            
$enter_passw mysql_result($res$i"password");
        }
    }
    
mysql_close($db_connect);    
?>
Этим кодом я нахожу пользователя, но на странице не запускается сессия, т.е. вместо кнопки Вход должен появиться Логин пользователя, а его нет. Но я думаю, что проблема в этом коде, т.к. если убрать цикл и условие, то аутентификация проходит успешно, но только для первого пользователя в таблице. Помогите пожалуйста.
Ilya_L вне форума Ответить с цитированием
Старый 06.06.2011, 07:16   #2
mrgrudge
Форумчанин
 
Аватар для mrgrudge
 
Регистрация: 20.02.2010
Сообщений: 229
По умолчанию

PHP код:
<?php
    $db_connect 
= @mysql_connect("localhost""root"""); 
    
mysql_select_db("suite");
    
    
$res mysql_query('SELECT * FROM users');
    
$count mysql_num_rows($res);
        
    for (
$i 0$i $count$i++) {
        if ((
$_POST['login'] == mysql_result($res$i"login")) && ($_POST['passw'] == mysql_result($res$i"password"))) {        
            
$enter_login mysql_result($res$i"login");
            
$enter_passw mysql_result($res$i"password");
        }
    }
    
mysql_close($db_connect);    
?>

эм.... на мой взгляд куча лишнего кода. Надеюсь в таблице users вас есть поле id .я бы поделал что-то вроде

PHP код:
$login $_POST['login'];
$pwd $_POST['passw'];
$sql "SELECT id FROM users WHERE login =".$login." && pasw = ".$pwd."";//lдостаем id юзера по логину и пасу
$res mysql_query($sql);
mysql_close($db_connect);    
if(
$res)//если запрос вернул id ставим на него куку, ну или сесессию, как вамугодно собственно

     
setcookie('usr_id'$restime());

но в таком варианте надо проверять на уникальность логины при создании юзеров
думай как баг, действуй как баг, и ты найдешь баг )
mrgrudge вне форума Ответить с цитированием
Старый 06.06.2011, 08:43   #3
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

я не использую id пользователя.
Сессия у меня создается в другом месте, здесь только идет поиск логина в БД и присвоение логина и пароля переменным
$enter_login = mysql_result($res, $i, "login");
$enter_passw = mysql_result($res, $i, "password");
которые потом проверяются и создается сессия.
Есть ли какой нибудь другой способ записывать в них результат поиска в БД?
Ilya_L вне форума Ответить с цитированием
Старый 06.06.2011, 09:05   #4
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

PHP код:
session_start(); //инициализируем сессию
$login=$_POST['login']; 
$pass=$_POST['passw'];
$res=mysql_query("SELECT `pass` FROM `users` WHERE `login`='".$login."' LIMIT 1"); //выбираем пароль, ставим лимит в 1 результат
$res=mysql_fetch_array($res);
if(
$res['pass']==$pass)
{
    
$_SESSION['name']=$login//записываем логин в сессионную переменную name
}
else echo 
'неправильный пароль'
после этого, в любом другом файле можно будет проверять наличие авторизации:
PHP код:
session_start(); //инициализируем сессию
if(isset($_SESSION['name']))
{
    echo 
'Привет, '.$_SESSION['name'].'!';
}
else
{
    echo 
'Надо бы авторизоваться...';
    
//тут можно влепить форму для ввода логина/пароля

Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 06.06.2011, 09:06   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Цитата:
я не использую id пользователя.
- а это очень зря

Цитата:
Сессия у меня создается в другом месте, здесь только идет поиск логина в БД и присвоение логина и пароля переменным
- покажите это другое место, где создается сессия... и для чего

вот проверка есть ли пользователь с заданным логином и паролем...
и в зависимости от этого в сессию пишем logon = 1 или 0
PHP код:
session_start();
$sql "SELECT count(*) as s FROM users WHERE login =".$login." && pasw = ".$pwd."";
$res mysql_query($sql); 
if (
$res['s']>0) { $_SESSION['logon']=1;} else {$_SESSION['logon']=0;}
mysql_close($db_connect); 
ADSoft вне форума Ответить с цитированием
Старый 06.06.2011, 09:09   #6
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

если просто нужно присвоить значение логина и пароля переменным, тогда:
PHP код:
$login=$_POST['login']; 
$pass=$_POST['passw'];
$res=mysql_query("SELECT * FROM `users` WHERE `login`='".$login."' LIMIT 1");
$res=mysql_fetch_array($res);
if(
$res['pass']==$pass)
{
    
$enter_login=$res['login']; 
    
$enter_passw=$res['pass'];
}
else echo 
'неправильный пароль'
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 06.06.2011, 09:19   #7
mrgrudge
Форумчанин
 
Аватар для mrgrudge
 
Регистрация: 20.02.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Ilya_L Посмотреть сообщение
я не использую id пользователя.
что у вас тогда выступает в роли primary key в таблице users?
думай как баг, действуй как баг, и ты найдешь баг )
mrgrudge вне форума Ответить с цитированием
Старый 06.06.2011, 09:23   #8
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

login уникальный

вот другой файл, где проводится проверка при создании сессии
Код:
require_once('data.php');
$err = '';
if (isset($_POST['login']) && isset($_POST['passw'])) {
   if ($_POST['login']===$enter_login && 
      $_POST['passw']===$enter_passw) {
      session_start();
      $_SESSION['sess_login'] = $_POST['login'];
      $_SESSION['sess_pass'] = $_POST['passw'];
      header('Location: index.php');
      exit();
   }
   else {
      $err = '<span style="color: red"><b>';
      $err .= 'Login or password error!';
      $err .= '</b></span><br>';
   }
}

Последний раз редактировалось Ilya_L; 06.06.2011 в 09:35.
Ilya_L вне форума Ответить с цитированием
Старый 06.06.2011, 09:40   #9
mrgrudge
Форумчанин
 
Аватар для mrgrudge
 
Регистрация: 20.02.2010
Сообщений: 229
По умолчанию

Цитата:
login уникальный
трудностей при создании юзеров не испытываете?
Да и вообще использовать в таблице в качестве pk такую вещь как логин на мой взгляд немного коряво чтоли.
Я бы посоветовал добавить все же поле id в users и масса проблем сразу отпадет и сейчас и в будущем.
думай как баг, действуй как баг, и ты найдешь баг )
mrgrudge вне форума Ответить с цитированием
Старый 06.06.2011, 09:48   #10
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Я работал c SQL в Delphi и тоже не использовал id, брал в качестве primary, например, ISBN книги или серию-номер паспорта читателя.проблем не было. Добавляются логины без проблем.
Вот код, где идет проверка пустая ли сессия или нет и отображаем в документе index.php.
Код:
require_once('data.php');
if (isset($_SESSION['sess_login']) && isset($_SESSION['sess_pass'])) 
    if ($_SESSION['sess_login'] == $enter_login && $_SESSION['sess_pass'] == $enter_passw) { 
        echo $enter_login;
	echo "(";
	echo "0";
	echo ")";
	echo "&nbsp&nbsp&nbsp";
        echo "<a href='exit.php'>Выйти</a>";}
    else echo "<a href='admin.php'>Вход</a>/<a href='reg.php'>Регистрация</a>";
else echo "<a href='admin.php'>Вход</a>/<a href='reg.php'>Регистрация</a>";
Содержимое файла admin.php
Код:
require_once('data.php');
$err = '';
if (isset($_POST['login']) && isset($_POST['passw'])) {
   if ($_POST['login']===$enter_login && 
      $_POST['passw']===$enter_passw) {
      session_start();
      $_SESSION['sess_login'] = $_POST['login'];
      $_SESSION['sess_pass'] = $_POST['passw'];
      header('Location: index.php');
      exit();
   }
   else {
      $err = '<span style="color: red"><b>';
      $err .= 'Login or password error!';
      $err .= '</b></span><br>';
   }
}

Последний раз редактировалось Ilya_L; 06.06.2011 в 09:51.
Ilya_L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi работа с mysql через php gufon Общие вопросы Delphi 3 17.03.2011 18:01
Создать пользователя с доступом к одной базе MySQL ssdm SQL, базы данных 1 28.05.2010 18:36
Аутентификация пользователя didar_ Общие вопросы Delphi 18 10.11.2009 17:11
Статья : Авторизация и аутентификация на сайтах, через WinInet Anatol_rus Обсуждение статей 2 23.10.2009 21:23