我现在在我的智慧结束。这是我想知道的,我如何检查用户在我的登录页面上提供的信息(仅包含用户名和登录名),而不是我在数据库中的信息?我已经设法做到了,但现在我的问题是我已经确定的两件事。 1)如果提供的信息与我的数据库中存储的信息相比是真的那么我想将用户引导到另一个页面(我假设我的HTML中的ACTION方法将处理这个)。但如果输入错误,我想要登录页面的迭代,以便他们可以重新输入他们的详细信息。
if ($p===$p1)
{
header("Location:success.php");
}
else
{
header("Location:fail.php");
}
上面是我的代码,其中$ p是表单上密码字段的值,$ p1是数据库中的值。这段代码现在发生的是,即使密码甚至用户名不匹配,用户仍然可以访问成员页面。我已经能够确定问题在于“标题”方法。但即使我交换了两个用户仍然指向success.php。如果你不明白我的问题的关键,请恳请你不要忽视它只是问我,我会提供更多的信息。对不起,但我似乎无法得到
答案 0 :(得分:4)
这个代码现在发生了什么,即使密码甚至 用户名不匹配,用户仍然可以访问成员页面
你需要学习有关课程的基础知识。
一些链接可帮助您构建第一个身份验证页面:
PHP Login script tutorial
Php Simple Login Tutorial
Create Database Login Page with PHP
答案 1 :(得分:3)
你使用它来检查元素是否相同
if ($p===$p1) {
你说$ p是你的帖子变量而$ p1是来自数据库的数据......
我不太确定,因为我看不到你的剧本很多,但我希望if问题总是正确的,因为你使用三个= chars“===”,三个等号你检查变量类型。
两个变量都来自“数组”类型(据我所料),所以你的问题看起来像这样
if (array === array) {
这总是如此。
您应该指定您的if问题。
if ($p['password'] == $p['password']) {
或任何你想检查的东西。
总结:据我所知,在你的短代码中我会发现问题是三等分的标志
编辑:
您应该更改登录信息。 最好的方法是通过sql检查用户信息是否正确。
实施例: $ sql =“SELECT id FROM user WHERE name ='”。 $ p ['name']。 “'和密码= MD5($ p ['密码'])”
然后执行sql。您还可以使用计数(*)来检查登录信息是否正确。如果不正确,则不应从数据库返回。
答案 2 :(得分:2)
您在此提出的建议不会阻止用户访问“会员”页面 - 但是它应该确定在提交密码后用户被发送到哪个页面。如果后者不是这种情况,那么代码中的其他地方就会出现问题。
但正如我所提到的,如果你想阻止未经身份验证的用户访问某些页面,那么最简单的解决方案是在身份验证时在会话中设置一个标志,例如
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;
}
(注意标题后的显式退出('Location:...');)
一旦你得到了这个舔,那么你可以开始考虑在身份验证时重新生成会话ID,以防止会话固定/劫持问题,并将用户密码存储为哈希,以防止出现公开问题。
答案 3 :(得分:0)
试试这个:
var_dump($p);
var_dump($p1);
它不会解决您的问题,但它会向您显示存储在变量中的内容以及它们的变量类型。
您期待什么价值?