我有一个表单,其中包含要在插入数据库时以及编辑时填写的复选框列表。编辑时我试图用$groups
变量中的数据库中的字段列表填充字段,并且从group_id
的{{1}}组中检查选中的值group_id
。它正在工作,除了它只填写一个复选框,一些用户属于多个组。任何想法,或更有效的方法来做到这一点。
到目前为止我的代码
$user
答案 0 :(得分:2)
此问题是您搜索所有$users['group']
数组并且在找到匹配项时没有停止,因此,除非上次$uG['group_id']
与$group['id']
匹配,否则您将继续$checked
在设置它之后。
所以只需在找到匹配项时添加break
即可。
另外,正式设置检查状态的正确方法是checked="checked"
,尽管大多数现代浏览器都不是那种迂腐,但最好还是坚持使用HTML规范
<?php foreach($groups as $group) : ?>
<?php
$checked = '';
foreach ($user['groups'] as $uG) {
if ($uG['group_id'] == $group['id']) {
$checked = 'checked="checked"';
break;
}
}?>
<div class="checkbox">
<label for="group_id-<?php echo $group['id']; ?>">
<input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>">
<?php echo $group['name']; ?>
</label>
</div>
<? endforeach; ?>
您也可以使用三元运算符和in_array()
在一个简单的语句中执行此操作
<?php
foreach($groups as $group) :
$checked = in_array( $group['id'], $user['groups'] ) ? 'checked="checked"' : '';
?>
<div class="checkbox">
<label for="group_id-<?php echo $group['id']; ?>">
<input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>">
<?php echo $group['name']; ?>
</label>
</div>
<? endforeach; ?>
答案 1 :(得分:1)
首先定义$checked = '';
然后循环并在匹配找到时更改值
<?php foreach($groups as $group) : ?>
<?php
$checked = '';
foreach ($user['groups'] as $uG) {
if ($uG['group_id'] == $group['id']) {
$checked = "checked";
}
}?>
<div class="checkbox">
<label for="group_id-<?php echo $group['id']; ?>">
<input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>">
<?php echo $group['name']; ?>
</label>
</div>
<? endforeach; ?>