我是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
感谢每一个花时间观察、分析和/或帮助我的人。我真的很感谢你的时间。
您在第一次调用header
后忘记了exit
:
header('Location: homebeta.php');
exit;
是否检查PHP错误?阅读如何在PHP中获得有用的错误消息?了解更多。
我认为你的脚本可能会在开始时输出一些东西,阻止头或会话信息被发送。
试试这个:
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;
}
}
- 新增
Else
声明。 - 在你的
SQL query
反勾(只是为了安全起见) -
header location
.
并尝试从您的查询中删除MD5 hashing
,并在您的HTML-form
中复制并粘贴用户名和密码,然后登录。
好吧,你可能不会得到你的错误消息,因为你使用mysql_error而不是mysqli像其他所有东西,特别是在连接,有mysqli_connect_error()。
另外,根据手册,对于mysqli_connect_error:
,括号内应该为空。$mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
or die(mysqli_connect_error());