带有消息、日期和时间的php登录表单

带有消息、日期和时间的php登录表单,php,forms,passwords,Php,Forms,Passwords,我正在尝试创建一个php登录表单。我只想做一些调整,但当我修补它,它停止工作 如果您无法从代码中看到,我将尝试创建一个(模拟)登录表单,要求输入用户名和密码 我希望任何空白文本框在文本框右侧显示红色消息。(我有红色的错误信息,但我无法将其放到框的左侧) 我想要一个粘滞的表单,如果它被填写,它会保留任何一个字段(同样,我认为我已经设置好了这个表单,但不认为它可以一直工作) 我希望输入用户名:user和密码:abc123的人看到欢迎信息。如果你不使用用户名/密码组合,我想要一条消息,说明他们未经授

我正在尝试创建一个php登录表单。我只想做一些调整,但当我修补它,它停止工作

如果您无法从代码中看到,我将尝试创建一个(模拟)登录表单,要求输入用户名和密码

  • 我希望任何空白文本框在文本框右侧显示红色消息。(我有红色的错误信息,但我无法将其放到框的左侧)

  • 我想要一个粘滞的表单,如果它被填写,它会保留任何一个字段(同样,我认为我已经设置好了这个表单,但不认为它可以一直工作)

  • 我希望输入用户名:user和密码:abc123的人看到欢迎信息。如果你不使用用户名/密码组合,我想要一条消息,说明他们未经授权。(这是我真的不知道该怎么做)

  • 我希望这一切都在一个redux(我也认为我有工作,但不是100%肯定)

任何帮助都将不胜感激

这是我的代码:

<?php

define('TITLE', 'LOG IN');

// CSS
print '<style type="text/css" media="screen">
.error { color: red; }
    </style>';

    // Checking
    if ( isset($_POST['submitted']) ) {

$problem = FALSE;

// Each value

if (empty($_POST['email'])) {
    $problem = TRUE;
    print '<p class="error">Please enter the username!</p>';
}

if (empty($_POST['password1'])) {
    $problem = TRUE;
    print '<p class="error">Please enter the password!</p>';
}


if (!$problem) { //No problem

    // Printing the log in message
    print '<p>Thank you for logging in!</p>';

    $_POST = array();

} else {

    print '<p class="error">No entry!</p>';

       }

    }

    ?>
    <form action="login.php" method="post">

    <p>"Username": <input type="text" name="username" size="20" value="<?php if (isset($_POST['username'])) { print htmlspecialchars($_POST['username']); } ?>" /></p>
    <p>Password: <input type="password" name="password1" size="20" /></p>
    <p><input type="submit" name="submit" value="Log in" /></p>
    <input type="hidden" name="submitted" value="true" />
    </form>


“用户名”:好的,这是一个简单的登录,不适合实际使用。请阅读代码中的注释,看看我对每一条都有什么要说的。出于许多原因,登录是相当棘手的,所以这个示例并不打算演示真实世界中的工作代码库,而是一个非常简单的用户名/密码检查

与更复杂的使用相关的安全问题可能超出了这个答案,但下面的代码是我解释您在上面发布的内容的方式,而不涉及细节(可能会使您难以理解发生的最简单步骤)

如果你有任何问题,请告诉我。要查看正在运行的表单,请选中:

此外,为了简单起见,我使用了PHP的HEREDOC语法而不是带引号的字符串。要了解有关此有时很方便的表单的更多信息,请参阅


.错误{
颜色:红色;
}

这是我的完整代码。我几乎重写了整件事,因此如果编码风格差异太大,我对此表示歉意:

<?php
// Output our CSS code
echo    '<style type="text/css" media="screen">
            .error
            {
                color: red;
            }
        </style>';

// Define our variable      
$problem = false;

// Check if the form has been submitted
if (isset($_POST['submitted']))
{
    // If either user or password are empty, we have a problem
    if (empty($_POST['username']) || empty($_POST['password']))
    {
        $problem = TRUE;
    }

    // If there is no problem, username is user, and password is abc123, we're good
    if (!$problem && $_POST['username']=='user' && $_POST['password']=='abc123') {

        // Print our login message
        echo 'Thank you for logging in!<br />';
    }
    // Ok, there's either a problem or the username or password is wrong, so no entry for them
    else
    {
        echo '<p class="error">No entry!</p>';
    }

}

    ?>
    <form action="login.php" method="post">
    Username: <input type="text" name="username" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['username']))
        {
            echo $_POST['username'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['username']))
        {
            echo '<span class="error">Please enter a username!</span>';
        }
    ?>
    <br />Password: <input type="password" name="password" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['password']))
        {
            echo $_POST['password'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['password']))
        {
            echo '<span class="error">Please enter the password!</span>';
        }
    ?>
    <br /><input type="submit" value="Log in" />
    <br /><input type="hidden" name="submitted" value="true" />
</form>


用户名:这只是一个学习练习,对吗?我正在自学PHP,目前我正在尝试学习更多关于表单的知识。我以前做过一些,但我想尝试一些新技术。我希望我不会伤害你的感情,但这里有很多问题。让我看看我是否能写出一个简单的脚本来做你想做的事情,作为一个示范。感觉一点也不痛!这就是我来这里的原因。。。通过查看完整的代码和如何正确操作,我学到了很多@杰瑞德——非常感谢你这么做!我不知道这是否会让我成为一个糟糕的程序员,但我真的只能在看到完成的工作代码后才能理解代码/程序。也许我编写代码的时间越长,学到的东西越多,我会变得越好。再一次,非常感谢!!你太棒了@克里斯-没问题,你越是试图理解和审查其他代码,你就越能解决它。我花了一段时间才把代码打出来,让它工作起来,并且相当安全。:)如果你认为这是你的问题的答案,请点击答案旁边的勾勾勾选,也许还可以投票。点击复选标记并尝试投票,但我是新来的,所以我想这需要一段时间才能投票!谢谢你@克里斯-是的,我刚出生已经有一段时间了,所以我不记得什么时候可以投票了。我知道您只能在一个答案上单击复选标记,但您可以根据需要向上投票。:)谢谢你的代码以及。。。我真的在努力学习(想象一下!),所以看到不同的代码非常有帮助!好吧,我不想成为一个讨厌的人,但我只有两个问题。在查看了您的代码(并运行了几次)之后,我想知道在您提交后,输入字段是否会消失?(这似乎在未来我构建的其他表单上会很重要)。我的另一个问题是,如果输入字段真的消失了,有没有办法让“输入密码/用户名”单独出现而不在顶部显示“禁止输入”消息?我知道做这两个额外的元素需要改变if循环,我只是不确定要改变哪些循环。有人有什么建议吗?延迟回复:让输入字段检查是否设置了
$\u POST['submitted]
(如果以前提交过,则会设置)。不要将表单输出为HTML,而是让PHP仅在表单不为真(即尚未提交)时进行回显。
<?php
// Output our CSS code
echo    '<style type="text/css" media="screen">
            .error
            {
                color: red;
            }
        </style>';

// Define our variable      
$problem = false;

// Check if the form has been submitted
if (isset($_POST['submitted']))
{
    // If either user or password are empty, we have a problem
    if (empty($_POST['username']) || empty($_POST['password']))
    {
        $problem = TRUE;
    }

    // If there is no problem, username is user, and password is abc123, we're good
    if (!$problem && $_POST['username']=='user' && $_POST['password']=='abc123') {

        // Print our login message
        echo 'Thank you for logging in!<br />';
    }
    // Ok, there's either a problem or the username or password is wrong, so no entry for them
    else
    {
        echo '<p class="error">No entry!</p>';
    }

}

    ?>
    <form action="login.php" method="post">
    Username: <input type="text" name="username" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['username']))
        {
            echo $_POST['username'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['username']))
        {
            echo '<span class="error">Please enter a username!</span>';
        }
    ?>
    <br />Password: <input type="password" name="password" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['password']))
        {
            echo $_POST['password'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['password']))
        {
            echo '<span class="error">Please enter the password!</span>';
        }
    ?>
    <br /><input type="submit" value="Log in" />
    <br /><input type="hidden" name="submitted" value="true" />
</form>