【问题标题】:Recognize that checkbox was unchecked during a php/html form edit认识到在 php/html 表单编辑期间未选中该复选框
【发布时间】:2014-01-13 10:29:29
【问题描述】:

我正在使用 php/html 创建一个表单,它允许用户输入数据,然后在提交之前在流程结束时查看并选择性地编辑输入。一些输入是使用复选框完成的。使用堆栈溢出,一个很好的资源,我发现了如何显示以前输入的数据并允许用户进行更改。我的问题是复选框。我使用 session 变量来指示先前是否已选中复选框。在编辑期间,当用户选中以前未选中的框时,它将更新,但当用户取消选中已选中的框时,它在 Session 变量和数据库中保持选中状态。

这是我用来在“更新”页面上显示之前输入的复选框的代码:

<?php 
session_start();
...
<input type="checkbox" name="Name1" <?php if($_SESSION['Name1']=="on"){echo 'checked';}?>/>
...

然后,当用户进行更改并单击更新按钮时,会话变量将使用以下代码更新:

<?php
session_start();
foreach ($_POST as $key => $value) { $_SESSION[$key] = $value;}

文本字段完美更新。任何帮助,将不胜感激!这两天我一直在旋转我的轮子!!!

以下是代码的一些额外摘录: 来自显示更新字段的 php 文件:

<form method="post" action="UpdateVolunteerEnter.php">
/* example of text field */
Email Address
<input type="text" name="VolunteerEmail" id="VolunteerEmail" size="50" value="<?php echo $_SESSION['VolunteerEmail']; ?>"/>
<br />
/*example of checkbox field */
<input type="checkbox" name="AfterProm" id="AfterProm" <?php if($_SESSION['AfterProm']=="on"){echo "checked";}?>/>
<br />
<input type="submit" name="Update" id="Update" value="UPDATE" />   
</form>

这里是从文件中摘录的代码,用于处理带有您建议的更新的输入:

<?php
session_start();
//Update Session Variables

foreach ($_POST as $key => $value) {
    if($value == ''){
        unset($_SESSION[$key]);
    }
    else {
        $_SESSION[$key] = $value;
    }
}

所以在进行了一些故障排除和更多挖掘之后,我发现如果未选中复选框,则它不在 $_POST 中,因此 $_SESSION 变量没有被更新。我在我的 php 文件中添加了以下语句,该语句处理表单输入以检查这种情况并纠正它,以便它现在可以工作!!!

foreach ($_POST as $key => $value) {$_SESSION[$key] = $value;}
//Check for unchecked checkboxes (one if statement per checkbox)
if (isset($_SESSION['checkbox1']) AND !isset($_POST['checkbox1'])){unset($_SESSION['checkbox1']);}}

【问题讨论】:

    标签: php html checkbox


    【解决方案1】:

    您应该检查这些复选框是否不为空,如$_POST[$key] != '',如果它们为空,请从$_SESSION 数组中取消设置,如unset($_SESSION[$key])
    所以整个代码是:

    session_start();
    foreach ($_POST as $key => $value) { 
        if($value == ''){
            $_SESSION[$key] = false;
            unset($_SESSION[$key]);
        }
        else {
            $_SESSION[$key] = $value;
        }
    }
    

    UPD:尝试明确取消设置所需的变量。这不是一个很好的代码示例,但我不知道上下文,所以我只能提供建议。

    if($_POST['Name1'] != 'on'){
        $_SESSION['Name1'] = false;
        unset($_SESSION['Name1']);
    }
    

    【讨论】:

    • 感谢您的回复……但它不起作用;o(在我插入建议的代码后,在编辑屏幕中未选中的复选框仍会在审阅屏幕上显示为已选中。还有其他想法吗?
    • 感谢您一直以来的关注!我在原始问题陈述中添加了额外的代码。
    • 尝试在unset 语句之前将$_SESSION[$key] 设置为false。更新了答案。
    • 所以做了一点故障排除,我发现如果未选中复选框,它们就不会被发布,因此不会被更新,那么我该如何让它们发布呢?我需要设置一个值吗?
    • 感谢您的帮助迪玛!我已经找到了答案(请参阅更新的问题)......不是最迷人的代码,但我很高兴它可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多