我有一个具有一组用户权限的用户编辑页面。每个权限基本上都是一个复选框。如果选中,则用户具有权限如果未选中,则该用户没有权限。因此,如果我想删除权限,我会取消选中该框,反之亦然,以添加权限。
我使用隐藏输入完成了所有工作,但我遇到的问题是它同时提交了隐藏输入和复选框值。例如,即使我不进行更改并单击更新按钮,我也会收到一条消息,内容如下:
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代码来检查它是否被选中?
如果你想使用这个技巧。。。必须命名相同的两个数组!
<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将被启用。
祝你好运。
隐藏输入和复选框值都会被提交,因为它们的输入类型不同。
您不需要显式地对checked进行硬编码。编写一个php-if循环来检查用户是否有权限,并相应地回显"checked"。
//编辑:这是我用来解决这个问题的代码。只需覆盖数据库中用户的所有规则。你只需要知道规则的数量(用常数表示)。
<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>
我希望我能帮上忙。
在jQuery 中使用此
$("input[type=checkbox]:not(:checked)").attr("value");
好吧,对于所有未选中的复选框,您可以将其收集到数组中。。。并在提交到服务器时发送
var aUnchecked = new Array();
$("input[type=checkbox]:not(:checked)").each(fucntoin(){
aUnchecked.push($(this).attr("name"));
}