我现在已经无计可施了。以下是我想知道的,我如何检查用户在我的登录页面上提供的信息(仅包括用户名和登录名)与我数据库中的信息?我已经可以做到这一点,但现在我的问题是我已经确定的两件事。1) 如果提供的信息与存储在我的数据库中的信息相比是真实的,那么我想将用户引导到另一个页面(我认为HTML中的ACTION方法会处理这一问题)。但如果输入错误,那么我希望对登录页面进行迭代,这样他们就可以重新输入自己的详细信息。
if ($p===$p1)
{
header("Location:success.php");
}
else
{
header("Location:fail.php");
}
上面是我的代码,$p是表单密码字段中的值,$p1是数据库中的值。这个代码现在的情况是,即使密码甚至用户名不匹配,用户仍然可以访问成员页面。我已经能够确定问题出在"header"方法上。但即使我把两者互换,用户仍然指向success.php。如果你不理解我问题的症结所在,我恳请你不要忽视它,只要问我,我会提供更多信息。很抱歉,我似乎无法获得
现在这个代码发生的情况是,即使密码和用户名不匹配,用户仍然可以访问成员页面
你需要学习会话的基本知识。
一些链接可以帮助您建立第一个身份验证页面:
PHP登录脚本教程
Php简单登录教程
使用PHP 创建数据库登录页
您使用这个if来检查元素是否是相同的
if ($p===$p1) {
你说$p是你的post变量,$p1是数据库中的数据。。。
我不太确定,因为我看不到你的脚本,但我希望if问题总是正确的,因为你使用了三个=字符"==="和三个等号来检查变量类型。
两个变量都来自"数组"类型(据我所料),所以你的问题看起来总是像这个
if (array === array) {
这总是真的。
您应该指定if问题。
if ($p['password'] == $p['password']) {
或者你想检查的任何东西。
总结:就我在你的短代码中所看到的,我认为问题是三重等号
编辑:
您应该更改您的登录名。最好的方法是通过sql检查用户信息是否正确。
示例:$sql="SELECT id FROM user WHERE name='"$p[姓名]。"'和密码=MD5($p['password'])"
然后执行sql。您还可以使用count(*)来检查登录信息是否正确。如果它不正确,那么应该不会从数据库返回。
您在这里提出的建议不会阻止用户访问"成员"页面,但它应该确定用户在提交密码后被发送到哪个页面。如果不是后者,那么代码中的其他地方就会出现问题。
但正如我所提到的,如果你想阻止未经身份验证的用户访问某些页面,那么最简单的解决方案是在身份验证时在会话中设置一个标志,例如
session_start();
if ($_POST['password']===stored_password($_POST['username'])) {
$_SESSION['authenticated']=$_POST['username'];
header("Location:success.php");
exit;
} else {
header("Location:fail.php");
exit;
}
然后在每个经过验证的页面的顶部:
session_start();
if (!$_SESSION['authenticated']) {
header("Location:fail.php");
exit;
}
(注意标头后面的显式退出("位置:…");)
一旦你做到了这一点,你就可以开始考虑在身份验证时重新生成会话id,以防止会话固定/劫持问题,并将用户密码存储为哈希,以防止泄露问题。
试试这个:
var_dump($p);
var_dump($p1);
它不会解决你的问题,但它会向你展示变量中存储的内容以及它们是什么类型的变量。
你期望什么样的价值观?