SHA功能问题

时间:2010-03-26 01:38:35

标签: php mysql login

我有来自login.php的这个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>';
    }
}

由于某种原因,它总是最终在else语句中设置$ errmsg。我确信我输入的信息(用户名,密码)正确且存在于数据库中。

我使用此查询插入我的值(来自注册脚本):

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

有人看到这个脚本的问题吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我没有发现代码中有任何重大错误,但我有很多建议可以帮助调试它:

  1. 再次检查用户名和密码。在查询之前回复这两个问题,以确保它们在转义后仍然与数据库中的内容相匹配。
  2. 回显查询字符串并在phpmyadmin或shell中运行。
  3. 确保将值作为POST发送,而不是GET。
  4. 如果两行具有相同的用户名和密码,则将if (mysqli_num_rows($data) == 1) {更改为if (mysqli_num_rows($data) > 0) {

答案 1 :(得分:0)

您也可以使用PHP执行此操作:

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

在这种情况下,你不需要使用逃避它。