使用数据库中的字段添加来自数据库的已检查变量

时间:2016-04-15 21:19:35

标签: php html mysql

我有一个表单,其中包含要在插入数据库时​​以及编辑时填写的复选框列表。编辑时我试图用$groups变量中的数据库中的字段列表填充字段,并且从group_id的{​​{1}}组中检查选中的值group_id。它正在工作,除了它只填写一个复选框,一些用户属于多个组。任何想法,或更有效的方法来做到这一点。

到目前为止我的代码

$user

2 个答案:

答案 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; ?>