1

我是 PHP / MySql 编程的新手。我买了一本书来帮助学习这门语言,到目前为止我做得很好,除非我尝试创建一个身份验证系统。

我希望能够使用 MD5 加密将记录与数据库匹配,如果找到,则发送到网站。如果用户名和密码不正确,请再次将它们发送到登录页面。

在某一时刻,它只会匹配第一条记录。现在它不会匹配任何东西。我可以准确输入数据库中的内容,结果仍然为 0 或返回登录页面。

此外,我想为用户名和 auth_level 设置一个会话变量,以便我可以在整个网站/应用程序中调用它。

如果有帮助,我将在 Mac 上使用 XAMPP。

授权脚本:

if ((!isset($_POST['username'])) || (!isset($_POST['password']))) {
    header('Location: login.html');
    exit;
}

$mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
      or die(mysql_error($mysqli));

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);
$auth_sql ="SELECT username , auth_level FROM auth_users WHERE

username ='".$username."' AND password =MD5('".$password."')";

$auth_sql_res = mysqli_query($mysqli, $auth_sql) or die(mysqli_error($mysqli));

if (mysqli_num_rows($auth_sql_res) == 1) {
    $_SESSION['username'] = $username;
    header('Location: homebeta.php');
} else {
    header("Location:index.php");
    exit;
}

PHP v5.3.1

感谢所有花时间查看、分析和/或帮助的人。我真的很感谢你的时间。

4

3 回答 3

1

exit您在第一次致电后忘记了header

header('Location: homebeta.php');
exit;

你在检查 PHP 错误吗?阅读如何在 PHP 中获取有用的错误消息?了解更多。

我认为您的脚本可能会在开始时输出一些内容,从而阻止发送标头或会话信息。

于 2013-04-15T16:10:53.007 回答
1

尝试这个:

if ((!isset($_POST['username'])) || (!isset($_POST['password']))) {
    header('Location: http://www.replacethis.com/login.html');
} else {
    $mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
        or die(mysql_error($mysqli));

    $username = mysqli_real_escape_string($mysqli, $_POST['username']);
    $password = mysqli_real_escape_string($mysqli, $_POST['password']);

    $auth_sql = "SELECT `username`, `auth_level`
        FROM `auth_users`
        WHERE `username` = '$username' AND `password` = MD5('$password')";

    $auth_sql_res = mysqli_query($mysqli, $auth_sql)
        or die(mysqli_error($mysqli));

    if (mysqli_num_rows($auth_sql_res) > 0) {
        $_SESSION['username'] = $username;
        header('Location: http://www.replacethis.com/homebeta.php');
    } else {
        header("Location: http://www.replacethis.com/index.php");
        exit;
    }
}
  1. Else声明补充说。
  2. 你的反引号SQL query(只是为了安全起见)
  3. 中的绝对 URL header location

并尝试MD5 hashing从您的查询中删除并复制 n 将用户名和密码粘贴到您的HTML-form然后登录。

于 2013-04-15T16:49:44.713 回答
0

好吧,您可能没有收到错误消息,因为您使用的是 mysql_error 而不是 mysqli,就像其他所有东西一样,特别是在连接时,有 mysqli_connect_error()。

此外,根据手册,括号内对于 mysqli_connect_error 应该是无效的:

$mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
  or die(mysqli_connect_error());
于 2013-05-01T17:19:46.853 回答