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

时间:2015-02-25 20:23:04

标签: javascript php jquery html checkbox

我有一个用户编辑页面,其中包含一组用户权限。每个权限基本上都是一个复选框如果选中,则用户具有该权限,如果未选中,则用户没有该权限。因此,如果我想删除权限,我将取消选中该框,反之亦然,以添加权限。

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

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代码来查找是否已检查?

5 个答案:

答案 0 :(得分: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。

祝你好运。

答案 1 :(得分:0)

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

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

我希望我能提供帮助。

答案 2 :(得分:0)

隐藏输入和复选框值都是提交的,因为它们具有不同的输入类型。

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

答案 3 :(得分:-1)

在jQuery中使用它

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

很好地获取并使用所有未选中的复选框执行操作,您可以将其收集到数组中...并将其发送到提交服务器

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

答案 4 :(得分:-1)

我不明白为什么你使用两个元素,但是当你提交表格时:

$allIds = $_RESULT['removePermission'];

是包含所有ID的数组,而:

$idsWithPermission= $_RESULT['addPermission'];

是一个只有那些应该拥有它的数组。

所以:

$idsToRemove = array_diff($allIds , $idsWithPermission);

包含所有未检查的ID,而$ idsWithPermission包含已检查的ID。