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

Php 使用初始默认值记住表单复选框状态,php,html,forms,post,Php,Html,Forms,Post,我有一张带复选框的表格。当用户第一次访问页面时,我希望复选框被选中。但是,如果他们取消选中该复选框,然后提交页面,我希望它保持未选中状态(如果他们提交页面时选中该复选框,则保持选中状态) 为了确定何时检查并提交表单,我目前正在执行以下操作: <input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if ($_POST['seeAll'] == 'true') echo checked; ?>&

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

为了确定何时检查并提交表单,我目前正在执行以下操作:

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

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

如果需要非永久性方法,可以使用$\u会话:

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


我不知道为什么我花了这么长时间才想出这个答案,但在努力解决这个问题后,我意识到我可以像以前那样通过
$\u POST
检查复选框的值,并且可以通过执行以下操作来检查用户是否通过提交按钮以外的其他方式到达页面:

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

工作就像我需要的

一种解决方案是同时使用
$\u SESSION[“”]
$\u POST[“”]
。 (参见下面的说明和代码)

解释

  • 如果未设置
    $\u会话[“loadcount”]
    ,请将其设置为0
  • 对于每个
    if(设置($\u POST[“提交”]
    ),将
    $\u会话[“加载计数”]
    增加+1
  • 在输入type=“checkbox”的“checked”选项中,回显PHP.If
    If($\u SESSION[“loadcount”]==0)
    echo“checked”。(将复选框设置为初始选中状态。)
  • 否则,如果
    (设置($\u POST[“agree”]
    回显“checked”,以记住用户检查的状态。(记住用户设置的检查状态)
  • 代码

    
    
    如果您想永久使用数据库或文件,否则可以使用$\u SESSION甚至cookiesBut$\u SESSION变量,但如果他们通过submit按钮以外的任何方式重新访问页面,则无法重新检查该框。无论发生什么情况,它都会记住上次选中的状态,对吗?这就是为什么我在那里添加了将其存储在数据库中的选项,您没有注意:如果它是会员的一部分,或者是免费的,这取决于您是否知道这将持续会话的时间。这不会导致默认值(选中)如果用户通过“提交”按钮以外的其他方式重新访问页面,则不设置此复选框。例如,如果用户重新输入URL,我希望复选框返回默认的“已选中”,即使上次提交表单时未选中此复选框。您的说明不清楚或您的解决方案不起作用。如果用户浏览并然后回到页面,它将“忘记”复选框的状态。也许我的解释不清楚,但这正是我想要的。从上面看,
    ,同时检查他们是否重新访问页面(例如重新输入URL)?
    因此,只有当他们通过“提交”按钮被放回页面时,才记得状态。这就是为什么我最初回应了你下面的答案。明白了,我看到了你想要什么和我现在写什么的区别。这是一个很好的解决方案!我今天也遇到了同样的问题,你的答案让我走上了正确的轨道。我唯一的建议是要将IF语句中的第一个条件从“IF”($\u POST['seeAll']='true')更改为“IF(!empty($\u POST['seeAll']”),原因是empty()还会测试是否选中该框,它还可以防止出现PHP警告,否则会填充日志)每当引用“未定义索引”“seeAll”时。当访问者尚未提交表单时就会发生这种情况。一个次要的细节,请关闭您的br标记。

    在HTML中,
    标记没有结束标记。请检查:如果有证据表明质量不好……那么再次检查,

    标记将正常工作首先,HTML是一个标记,所以每个标记都应该开始和结束。如果标记是自包含的,例如

    和其他,则标记可能定义预期的结果……在这种情况下,您是对的。br标记是自包含的,但具有闭合的br标记将指示XHTML文档,这正是我感到困惑的地方。作为参考,“比W3学校优越得多。”博纳蒂建议采纳。感谢MDN链接。
    <input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if(($_POST['seeAll'] == 'true') || !isset($_POST['submit'])) echo checked; ?>>
    
    <?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>