使用初始默认值记住表单复选框状态


Remembering Form Checkbox State With Initial Default Value

我有一个带有复选框的表单。当用户首次访问该页面时,我希望"选中"复选框。但是,如果他们取消选中该框然后提交页面,我希望它保持未选中状态(如果他们提交选中该页面的页面,则保持选中状态)。

为了确定何时检查并提交表格,我目前正在做:

<input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if ($_POST['seeAll'] == 'true') echo checked; ?>>

这非常适合在需要时选中该框,但是,如果他们以这种方式提交,我将如何确保它保持未选中状态,同时如果他们重新访问页面(例如通过重新输入 URL)也被选中?

谢谢!

我不知道为什么我花了这么长时间才想出这个答案,但是在为此苦苦挣扎之后,我意识到我可以通过$_POST检查复选框的值,就像我以前所做的那样,并且可以检查用户是否通过提交按钮以外的其他方式到达页面

<?php if(($_POST['seeAll'] == 'true') || !isset($_POST['submit'])) echo checked; ?>

如果用户提交了表单,那么isset($_POST['submit'])将是真实的,因此如果是这种情况并且$_POST['seeAll']为空,则显然用户提交了未选中的框。如果isset($_POST['submit'])为 false,则用户在没有提交表单的情况下到达页面,我应该选中复选框作为"默认"。

因此,我的整个<input>标签如下所示:

<input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if(($_POST['seeAll'] == 'true') || !isset($_POST['submit'])) echo checked; ?>>

工作就像我需要的那样!

注意::这与OP的问题不同,因为即使用户离开页面(例如,到 www.facebook.com),然后回到页面,它也会记住复选框的值。OP 希望它只记住页面发布到时复选框的值。

如果你想要一个非永久性的方法,你可以使用 $_SESSION :

<?php
    if (!isset($_SESSION)) {
        session_start();
    }   
    if ($_POST['seeAll'] == 'true' || !isset($_SESSION['seeAll'])) {
        $_SESSION['seeAll'] = true;
    } else {
        $_SESSION['seeAll'] = false;
    }
?>

<form method="POST">
    <input type='checkbox' class='seeAll' name='seeAll' value='true' 
        <?php if ($_SESSION['seeAll']) echo 'checked'; ?>
    />
    <input type='submit'/>
</form>

参见:http://php.net/manual/en/session.examples.basic.php

一种解决方案是同时使用 $_SESSION[""]$_POST[""] 。(请参阅下面的说明和代码

解释

  1. 如果未设置$_SESSION["loadcount"],请将其设置为 0。
  2. if (isset($_POST["submit"]$_SESSION["load count"]增加+1。
  3. 在输入类型="复选框"的"选中"选项中,回显 PHP。如果if ($_SESSION["loadcount"] == 0)回声"选中"。(将复选框设置为初始选中状态。
  4. 否则,如果(isset($_POST["agree"]回显"已检查",则记住用户检查的状态。(记住用户设置的已检查状态。

法典

<?php
session_start();
?>
<!DOCTYPE html>
<html>
    <body>
        <?php  // session_firstload.php
            // Check if $_SESSION is not set, set $_SESSION loadcount to 0
            if (!isset($_SESSION["loadcount"])) 
                $_SESSION["loadcount"] = 0;
            // When the user submits using POST Method
            if (isset($_POST["submit"]))
            {
                // Increase $_SESSION["loadcount"] by +1
                $_SESSION["loadcount"] = $_SESSION["loadcount"] + 1;
            }
            // Echoing for Debugging / Understanding
            echo $_SESSION["loadcount"];
        ?>
        <form action="session_firstload.php" method="post">
            <input id="agree" type="checkbox" name="agree" 
            <?php 
                // If Check the Checkbox is $_SESSION["loadcount"] == 0
                // Else 'remember' with (isset($_POST["agree"]
                if ($_SESSION["loadcount"] == 0) 
                        echo "checked";
                    else
                    {
                        if (isset($_POST["agree"]))
                            echo "checked";
                    }
            ?>
            >I Agree<br>
            <input type="submit" name="submit">
        </form>
    </body>
</html>