如何提交未选中复选框的值

Posted

技术标签:

【中文标题】如何提交未选中复选框的值【英文标题】:how can I submit the value of an unchecked checkbox 【发布时间】:2015-02-25 20:23:03 【问题描述】:

我有一个具有一组用户权限的用户编辑页面。每个权限基本上都是一个复选框。勾选表示用户有权限,不勾选表示用户没有权限。因此,如果我想删除权限,我会取消选中该框,反之亦然以添加权限。

我使用隐藏输入让一切正常工作,但我遇到的问题是它同时提交了隐藏输入和复选框值。例如,即使我不进行更改并单击更新按钮,我也会收到一条消息:

Removed access from 1 permission levels
Added access to 1 permission levels

我将在下面向您展示我的代码。需要记住的是,每个输入调用不同的函数。

这里是输入:

<ul class="list-group permission-summary-rows">
<?php //List of permission levels user is apart of
foreach ($permissionData as $v1) 
    if(isset($userPermission[$v1['id']]))
?>                              
    <li class="list-group-item">
        <?php echo $v1['name']; ?>
        <span class="pull-right">
            <input type="hidden" name="removePermission[<?php echo $v1['id'] ?>]" id="removePermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >
            <input type="checkbox" checked data-toggle="switch" name="addPermission[<?php echo $v1['id'] ?>]" id="addPermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >
        </span>
    </li>                               
<?php
    

?>
<?php //List of permission levels user is not apart of  
foreach ($permissionData as $v1) 
    if(!isset($userPermission[$v1['id']]))
?>                          
    <li class="list-group-item">
        <?php echo $v1['name']; ?>
        <span class="pull-right">                                               
            <input type="checkbox" data-toggle="switch" name="addPermission[<?php echo $v1['id'] ?>]" id="addPermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >                                         
        </span>
    </li>                           
<?php
    

?>

这里是 PHP:

//Remove permission level
    if(!empty($_POST['removePermission'])) 
        $remove = $_POST['removePermission'];
        if ($deletion_count = removePermission($remove, $userId)) 
            $successes[] = lang("ACCOUNT_PERMISSION_REMOVED", array ($deletion_count));
         else 
            $errors[] = lang("SQL_ERROR");
        
    
    // Add permission level
    if(!empty($_POST['addPermission'])) 
        $add = $_POST['addPermission'];
        if ($addition_count = addPermission($add, $userId)) 
            $successes[] = lang("ACCOUNT_PERMISSION_ADDED", array ($addition_count));
         else 
            $errors[] = lang("SQL_ERROR");
        
    

即使我在复选框输入下方添加隐藏输入,我也会收到相同的消息。我知道这与使用不同的功能有关,所以任何人都可以引导我朝着正确的方向前进吗?我应该使用一些 JS 代码来查找它是否被选中?

【问题讨论】:

未选中的复选框和单选按钮不会提交。 我知道这就是我使用隐藏输入的原因,但问题是它同时提交了隐藏和复选框。我只希望它在未选中或选中该框的情况下提交。例如,默认情况下选中该框,因为用户拥有权限,所以如果他们取消选中它,我希望它只提交隐藏的输入。 您可以在提交后,删除数据库中该用户的所有权限,然后添加已提交的权限。 【参考方案1】:

如果你想使用这个技巧......你必须为两个数组命名相同!

<input type="hidden" name="Permission[<?php echo $v1['id'] ?>]" id="removePermission[<?php echo $v1['id'] ?>]" value="0" >
<input type="checkbox" <?php echo ($v1['id']=='YES')?'checked':'' ?> data-toggle="switch" name="Permission[<?php echo $v1['id'] ?>]" id="AddPermission[<?php echo $v1['id'] ?>]" value="1" >

查看“$v1['id']=='YES'”并使用正确的比较。请记住,名称必须相同,值 0 将被禁用,1 将被启用。

祝你好运。

【讨论】:

【参考方案2】:

隐藏输入和复选框值都被提交,因为它们属于不同的输入类型。

您不需要明确地硬编码检查。编写一个 php if 循环来检查用户是否有权限并相应地回显“检查”。

【讨论】:

【参考方案3】:

//编辑: 这是我将用于此问题的代码。只需覆盖数据库中用户的所有规则。您只需要知道规则的数量(由常量表示)。

<html>
<body>

<?PHP

define("NUMBEROFINPUTS",5);

if(isset($_GET["permissions"]))
    $dbperms = array();
    foreach($_GET["permissions"] as $permission) 
        $dbperms[$permission] = 1;
    
    //$dbperms: 0->Input is not set; 1-> Input is set
    for($i=0;$i<NUMBEROFINPUTS;$i++)
        if(isset($dbperms[$i])) 
            echo "Input ".$i." is set<br />";
        
        else
            echo "Input ".$i." is not set<br />";
        
    

else 
    echo '<form>';
    for($i = 0;$i<NUMBEROFINPUTS;$i++)
        echo 'Permission '.$i.': <input type="checkbox" name="permissions[]" value="'.$i.'" checked /><br />';
    
    echo '<input type="submit" /></form>';

?>
</body>
</html>

希望能帮到你。

【讨论】:

查看我编辑的答案以获得最直接的解决方案。 我有点困惑。我应该用你的代码替换我的代码吗?如果是这样,我应该替换我的代码的哪一部分? 只需将我的代码放入一个空文件,然后放到您的测试服务器上(例如 XAMPP)。打开它,你会看到它的作用......【参考方案4】:

在 jQuery 中使用它

$("input[type=checkbox]:not(:checked)").attr("value");

对于获取并使用所有未选中的复选框进行一些操作,您可以将其收集到数组中...并在提交时将其发送到服务器

var aUnchecked = new Array();
$("input[type=checkbox]:not(:checked)").each(fucntoin()
    aUnchecked.push($(this).attr("name"));

【讨论】:

这会提交所有其他未选中的输入的值吗?

以上是关于如何提交未选中复选框的值的主要内容,如果未能解决你的问题,请参考以下文章

如果未选中复选框,如何提交 0,如果在 HTML 中选中复选框,如何提交 1 [重复]

如何用jquery标记未选中复选框的值?

如果在页面初始加载时未选中复选框,则返回无效提交

如何在不提交表单的情况下获取选中或取消选中复选框的值

如何更改未选中复选框的值0

如何使未选中的复选框值为 0,选中的值为 1?