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


Автор: Spiker 3.3.2009, 02:50
Login
Код

<?php 
require_once '../library/config.php'; 
require_once './library/functions.php'; 

$errorMessage = '&nbsp;'; 

if (isset($_POST['txtUserName'])) { 
    $result = doLogin(); 
     
    if ($result != '') { 
        $errorMessage = $result; 
    } 
} 

?> 
<html> 
<head> 
<title>Логин</title> 
<meta http-equiv="Content-Type" content="text/html"> 
<link href="include/admin.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
<table width="750" border="0" align="center" cellpadding="0" cellspacing="1" class="graybox"> 
<tr> 
  <td><img src="include/banner-top.gif" width="750" height="75"></td> 
</tr> 
<tr> 
  <td valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="20"> 
    <tr> 
     <td class="contentArea"> <form method="post" name="frmLogin" id="frmLogin"> 
       <p>&nbsp;</p> 
       <table width="350" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#336699" class="entryTable"> 
        <tr id="entryTableHeader"> 
         <td>:: Админ Логин ::</td> 
        </tr> 
        <tr> 
         <td class="contentArea"> 
         <div class="errorMessage" align="center"><?php echo $errorMessage; ?></div> 
          <table width="100%" border="0" cellpadding="2" cellspacing="1" class="text"> 
           <tr align="center"> 
            <td colspan="3">&nbsp;</td> 
           </tr> 
           <tr class="text"> 
            <td width="100" align="right">Логин</td> 
            <td width="10" align="center">:</td> 
            <td><input name="txtUserName" type="text" class="box" id="txtUserName" value="admin" size="10" maxlength="20"></td> 
           </tr> 
           <tr> 
            <td width="100" align="right">Пароль</td> 
            <td width="10" align="center">:</td> 
            <td><input name="txtPassword" type="password" class="box" id="txtPassword" value="admin" size="10"></td> 
           </tr> 
           <tr> 
            <td colspan="2">&nbsp;</td> 
            <td><input name="btnLogin" type="submit" class="box" id="btnLogin" value="Логин"></td> 
           </tr> 
          </table></td> 
        </tr> 
       </table> 
       <p>&nbsp;</p> 
      </form></td> 
    </tr> 
   </table></td> 
</tr> 
</table> 
<p>&nbsp;</p> 
</body> 
</html> 


Function проверки логина
Код

function doLogin()
{
    
    $errorMessage = '';
    
    $userName = $_POST['txtUserName'];
    $password = $_POST['txtPassword'];
    

    if ($userName == '') {
        $errorMessage = 'You must enter your username';
    } else if ($password == '') {
        $errorMessage = 'You must enter the password';
    } else {

        $sql = "SELECT user_id
                FROM tbl_user 
                WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";
        $result = dbQuery($sql);
    
        if (dbNumRows($result) == 1) {
            $row = dbFetchAssoc($result);
            $_SESSION['site_user_id'] = $row['user_id'];
            

            $sql = "UPDATE tbl_user 
                    SET user_last_login = NOW() 
                    WHERE user_id = '{$row['user_id']}'";
            dbQuery($sql);


            if (isset($_SESSION['login_return_url'])) {
                header('Location: ' . $_SESSION['login_return_url']);
                exit;
            } else {
                header('Location: index.php');
                exit;
            }
        } else {
            $errorMessage = 'Wrong username or password';
        }        
            
    }
    
    return $errorMessage;
}


На хостинге 000webhost.com постоянно выбивает что я ввел не правелный пароль, когда на локалке все ОК.

Автор: Sentox 3.3.2009, 03:26
Странно .. у Вас пароль остаётся в открытом виде.
Вы когда регистрируетесь в базе данных пароль шифруете.Если да то здесь при авторизации нет.
Ой , извините не доглядел. smile 

Автор: NewDima 3.3.2009, 06:20
немного не в тему,
Код

$sql = "SELECT user_id
                FROM tbl_user 
                WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";

Опасный код

Автор: NewDima 3.3.2009, 06:38
Кстати, а где проверка успешности первого запроса? Скорее всего у тебя проблемы с доступом к базе

Автор: Spiker 3.3.2009, 11:25
Цитата(NewDima @ 3.3.2009,  06:38)
Кстати, а где проверка успешности первого запроса? Скорее всего у тебя проблемы с доступом к базе

если я правильно понял, то функция есть и находиться в index файле

Код

function checkUser()
{
    if (!isset($_SESSION['site_user_id'])) {
        header('Location: ' . WEB_ROOT . 'admin/login.php');
        exit;
    }
    
    if (isset($_GET['logout'])) {
        doLogout();
    }
}


Это что-то с самим хостингом, они опасно на-писаные скрипты блокируют. Сайт весь на базе данных, если бы что-то было с базой весь сайт не работал бы.

Автор: Spiker 3.3.2009, 11:57
Я не удивлюсь если они tbl_users  заблокировали.
Они мои admin папку тоже заблокировали, сам доступ к ней. После смены имени на папке, папка сама открыла доступ. Я подумал если способ дать больше доступа используя .HTACCESS 

Автор: NewDima 3.3.2009, 14:33
Цитата(Spiker @ 3.3.2009,  18:25)
если я правильно понял

Нет, неправильно. Функция делает запрос, но ее результат не проверяется. А что если запрос провалился? тогда и последующая функция возврата количества выдаст не тот результат, который ты ожидал. Возможно проблема доступа к базе данных именно у тебя

Автор: XupyprMV 3.3.2009, 14:44
Цитата(Spiker @ 3.3.2009,  02:50)
Код

        $sql = "SELECT user_id
                FROM tbl_user 
                WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";
        $result = dbQuery($sql);
    
        if (dbNumRows($result) == 1) {

            ...

        } else {
            $errorMessage = 'Wrong username or password';
        }        


Запустить запрос через phpMyAdmin и удостоверится что возвращается именно одна запись, а не 0 или скажем две.

Автор: Spiker 4.3.2009, 00:09
Цитата(XupyprMV @ 3.3.2009,  14:44)
Цитата(Spiker @ 3.3.2009,  02:50)
Код

        $sql = "SELECT user_id
                FROM tbl_user 
                WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";
        $result = dbQuery($sql);
    
        if (dbNumRows($result) == 1) {

            ...

        } else {
            $errorMessage = 'Wrong username or password';
        }        


Запустить запрос через phpMyAdmin и удостоверится что возвращается именно одна запись, а не 0 или скажем две.

получил 0  записей, на локалке 1  запись.

Автор: XupyprMV 4.3.2009, 10:41
Эм...

Надевая на себя шапку "капитан очевидность" могу отметить что:

Раз вернулось 0 записей при запуске SQL запроса напрямую к таблице, то:

1) В таблице действительно нет удовлетворяющих этому запросу записей. Соответственно нужно их создать.

2) Если вы скопировали таблицы с локальный машины на удалённую вместе с контентом то могла возникнуть проблема с функцией PASSWORD (возможно СУБД разных версий и алгоритм генерации был изменён). Тогда просто обновляем запись генерируя PASSWORD на удалённой машине.

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