两人的简单密码页面

时间:2019-01-14 21:35:15

标签: php html

我目前正在为两个人寻找简单的带密码的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");
    }

我实际上只需要两次登录即可,仅此而已,任何帮助都将非常有用,谢谢。

2 个答案:

答案 0 :(得分:1)

您可能想移动到检查是否设置了$_POSTinput标签是自动闭合的位置,如下所示:

<?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>
<?

由于以下原因,这为您设置了更强大的登录系统:

  • 轻松添加新帐户,而无需更改if / else语句
  • 轻松转换为数据库解决方案
  • 完全动态,可用于任何数量的登录

密码安全性

我完全不知道您的应用程序的安全性,但是通常不建议将任何密码存储为纯文本。如果有人以某种方式可以访问您的PHP文件,则您的所有帐户现在都处于危险之中。

这里有一个非常简单的解决方案,只需将密码存储为散列而不是纯文本即可。这有一些好处:

  • 即使有人可以直接访问读取文件,也可以保护您的帐户安全
  • 如果操作正确,甚至都不应该知道您任何用户的密码
  • 非常容易实现

现在,通常您将为此使用某种数据库,但是您也可以直接将其用于我之前给您的代码中。

假设我(GrumpyCrouton)要使用您的应用程序,因此您将我发送到密码哈希生成器网站,例如this onethis 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'])) {

参考文献: