PHP MySQL функция входа в систему - PullRequest
1 голос
/ 10 февраля 2011

Я использую это:

function authUser($username, $password){
    connectDB();
    $sql = "SELECT id, username FROM users where username = '".$username."' and password = '".$password."'";
    $result = mysql_query($sql);
    $num_rows = mysql_num_rows($result);
    if ($num_rows > 0){
        while ($row = mysql_fetch_array($result)){
            $username = $row['username'];
            session_start(); 
            session_register('username');
        return $username; 
        }
    }
    closeConn();
}

С комбинацией этого:

$auth = authUser($username, $password);
if (isset($username)){
    header( "Location: index.php" );
}

И затем на index.php (куда я перенаправляю их в случае успешного входа в систему)я пытаюсь повторить $ username.Но ничего не показывает?Есть идеи?Является ли эта функция проблемой?

РЕДАКТИРОВАТЬ:

теперь изменили ее так:

if ($num_rows > 0){
    while ($row = mysql_fetch_array($result)){
        $_SESSION['username'] = $row['username'];
      return true; 
    }
}

Это верно?

Ответы [ 7 ]

3 голосов
/ 10 февраля 2011

Я бы изменил:

while ($row = mysql_fetch_array($result)){
    $_SESSION['username'] = $row['username'];
  return true; 
}

в

$row = mysql_fetch_array($result);
$_SESSION['username'] = $row['username'];

потому что вы хотите войти и вывести ОДНОГО человека

1 голос
/ 10 февраля 2011

Обратите внимание, что вы всегда перенаправляете на index.php, а не только при успешном входе;

$auth = authUser($username, $password);
if (isset($username)){
    header( "Location: index.php" );
}

$username устанавливается как при успешном, так и при неуспешном входе в систему.

0 голосов
/ 02 октября 2012

Если вы используете mysql_fetch_array, тогда вы должны использовать массив, например: $row[0]

Вы можете использовать mysql_fetch_assoc(), чтобы использовать имя столбца таблицы ($row['username'])

0 голосов
/ 10 февраля 2011

Переменные не являются глобальными между экземплярами страницы, вам нужно поместить переменную в $ _SESSION, если вы хотите, чтобы она была доступна на нескольких страницах.

0 голосов
/ 10 февраля 2011

Убедитесь, что index.php имеет session_start(), вызываемый в верхней части скрипта, а также попробуйте использовать $_SESSION['username'] вместо $username. В настоящее время настроено много серверов, поэтому вам нужно вызывать полную переменную (с $ _SESSION), а не только сокращенную версию. Читайте о Register Globals в http://php.net/manual/en/security.globals.php. Если у вас все еще есть проблемы, выньте session_start() из функции authUser и переместите его также в первую строку этого скрипта.

0 голосов
/ 10 февраля 2011

Вам также необходимо использовать session_start() на странице индекса.

0 голосов
/ 10 февраля 2011

Во-первых, session_register устарел. используйте $ _SESSION:

$_SESSION['username'] = $row['username'];

Во-вторых, ваша функция authUser () возвращает либо имя пользователя (в случае успеха), либо ничего. Тогда этот код:

$auth = authUser($username, $password);
if (isset($username))...

следует изменить на

$username = authUser($username, $password);
if (isset($username))...

И еще одна вещь, проверка паролей в открытом виде - очень и очень плохая вещь. Рассмотрите возможность хеширования с помощью MD5 ().

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...