Проблемы с функцией SHA - PullRequest
1 голос
/ 26 марта 2010

У меня есть этот php-код из моего login.php

if (isset($_POST['logIn'])) {
    $errmsg = "";
    $logname = mysqli_real_escape_string($dbc, trim($_POST['usernameIn']));
    $logpassword = mysqli_real_escape_string($dbc, trim($_POST['passwordIn']));

    $query = "SELECT user_id, username FROM members WHERE username = '$logname' AND password = SHA('$logpassword')";
    $data = mysqli_query($dbc, $query);

    if (mysqli_num_rows($data) == 1) {
        $row = mysqli_fetch_array($data);
        setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30)); //expires after 30 days
        setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));
        $home = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
        header('Location: ' . $home);
    }
    else {
        $errmsg = '<p class="errormsg">Username or password is incorrect.</p>';
    }
}

И по какой-то причине всегда заканчивается установка $ errmsg в операторе else. Я уверен, что я ввожу правильную информацию (имя пользователя, пароль), которая существует в базе данных.

Я вставляю свои значения (из скрипта регистрации), используя этот запрос:

$query = "INSERT INTO members (username, password, email) VALUES ('$username', SHA('$password'), '$email')";

Кто-нибудь видел проблему с этим скриптом? Спасибо!

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Я не заметил каких-либо существенных ошибок в вашем коде, но у меня есть несколько советов, которые помогут отладить его:

  1. Проверьте имя пользователя и пароль еще раз. Выведите оба из них прямо перед запросом, чтобы убедиться, что они все еще соответствуют тому, что находится в базе данных после того, как они экранированы.
  2. выводит строку запроса и запускает ее в phpmyadmin или в оболочке.
  3. Убедитесь, что значения отправляются как POST, а не как GET.
  4. Измените if (mysqli_num_rows($data) == 1) { на if (mysqli_num_rows($data) > 0) {, если две строки имеют одинаковые имя пользователя и пароль
0 голосов
/ 26 марта 2010

Вы также можете сделать это из PHP с помощью:

VALUES ('$username', '".sha1($password)."', '$email')";

В этой ситуации вам не нужно использовать escape it.

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