我有一个表单,其中包含要在插入到数据库时以及在编辑时填写的复选框列表。编辑时,我试图用 $groups
变量中的数据库中的字段列表填充字段,并根据组中的 group_id
检查检查值$user
中的 group_id
。它正在工作,除了它只填写一个复选框并且一些用户属于多个组。任何想法或更有效的方法来做到这一点。
到目前为止,这是我的代码
<?php foreach($groups as $group) : ?>
<?php foreach ($user['groups'] as $uG) {
if ($uG['group_id'] == $group['id']) {
$checked = "checked";
} else {
$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; ?>
最佳答案
这个问题是您正在搜索所有 $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; ?>
关于php - 从数据库中添加已检查的变量以及数据库中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36657013/