我目前正在为两个人寻找简单的带密码的php页面,我目前正在为一个人工作,我试图将其改编为2,但我无法使其正常工作。
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
if($user == "admin"
&& $pass == "admin")
{
include("page1.html");
}
else
{
if(isset($_POST))
{?>
<form method="POST" action="secure.php">
User <input type="text" name="user"></input><br/>
Pass <input type="password" name="pass"></input><br/>
<input type="submit" name="submit" value="Go"></input>
</form>
<?}
}
?>
我尝试了两种不同的方式来返回错误。
if($user == "admin1"
&& $pass == "admin1")
{
include("page1.html");
}
if($user == "admin2"
&& $pass == "admin2")
{
include("page2.html");
}
我尝试过这种方式
if($user == "admin1, admin2"
&& $pass == "admin1, admin2")
{
include("page1.html, page2,html");
}
我实际上只需要两次登录即可,仅此而已,任何帮助都将非常有用,谢谢。
答案 0 :(得分:1)
您可能想移动到检查是否设置了$_POST
且input
标签是自动闭合的位置,如下所示:
<?php
if (isset($_POST['submit']))
{
$user = $_POST['user'];
$pass = $_POST['pass'];
if ($user === "admin" && $pass === "admin")
{
include("page1.html");
}
}
else
{
?>
<form method="POST" action="secure.php">
User <input type="text" name="user" /><br/>
Pass <input type="password" name="pass" /><br/>
<input type="submit" name="submit" value="Go" />
</form>
<?php
}
?>
这部分需要一个else if
子句:
<?php
if ($user === "admin1" && $pass === "admin1")
{
include("page1.html");
}
else if ($user === "admin2" && $pass === "admin2")
{
include("page2.html");
}
?>
此外,最好不要在代码库中混合使用<?php
标签和短标签(<?
)。
答案 1 :(得分:1)
我将创建一个用户数组(类似于您要存储在数据库中的用户……),然后在人们登录时针对该数组进行检查。
if(!empty($_POST)) {
$users = [
[
"username" => "admin",
"password" => "admin",
"page" => "page1.html"
],
[
"username" => "admin2",
"password" => "admin2",
"page" => "page2.html"
]
];
$user = $_POST['username'];
$pass = $_POST['password'];
//userid is the key of the user in your array
$userid = array_search($user, array_column($users, 'username'));
//if userid is false, that means the username doesn't exist
if($userid !== false) {
//assign this variable to the array of the user that is logging in
$usr = $users[$userid];
//check if users entered password is correct
if($usr['password'] == $pass) {
//display page if correct
include($usr['page']);
//kill the page if login successful, this way the form at the bottom does not show.
//if nothing has been POSTed, or if the username/password are wrong, the form at the bottom will show
die();
}
}
}
//this will always run if anything above fails
?>
<form method="POST" action="secure.php">
User <input type="text" name="user"/><br/>
Pass <input type="password" name="pass"/><br/>
<input type="submit" name="submit" value="Go"/>
</form>
<?
由于以下原因,这为您设置了更强大的登录系统:
我完全不知道您的应用程序的安全性,但是通常不建议将任何密码存储为纯文本。如果有人以某种方式可以访问您的PHP文件,则您的所有帐户现在都处于危险之中。
这里有一个非常简单的解决方案,只需将密码存储为散列而不是纯文本即可。这有一些好处:
现在,通常您将为此使用某种数据库,但是您也可以直接将其用于我之前给您的代码中。
假设我(GrumpyCrouton)要使用您的应用程序,因此您将我发送到密码哈希生成器网站,例如this one或this one(这些站点很多)。 (您也可以制作一个页面,使用password_hash()
自行生成它们,然后将您的登录详细信息发送给您。
然后您将使用这些详细信息创建一个新的数组条目:
[
"username" => "grumpycrouton",
//remember to use single quotes for this, because if you use double quotes you will get a syntax/undefined error.
"password" => '$2y$12$oHmy8gPNfcQ5j82lZCGA5uL8m0glyk/Imu1LhVhrPlAiLHzxjM0qW',
"page" => "grumpycrouton.html"
]
现在,您必须对结构进行一些修改才能使它起作用,但这是一个简单的更改。
只需更改此行:
if($usr['password'] == $pass) {
收件人:
if(password_verify($pass, $usr['password'])) {
参考文献: