php - 从数据库中添加已检查的变量以及数据库中的字段

标签 php html mysql

我有一个表单,其中包含要在插入到数据库时以及在编辑时填写的复选框列表。编辑时,我试图用 $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/

相关文章:

MySQL 数据库设计 : one to one, 多对多、多对一或太多?

php - Paypal IPN 系统无法正常工作?

php - 第一方应用程序的 Laravel Passport 密码授予流程

mysql - 获取laravel MySQL中除某个学生已购买的论文之外的所有论文

php - 将我的主导航定位在我居中的 Logo 下方。包括图像

html - 图像定位响应式设计

php - 查询不会保存

php - 为什么php不赞成使用的功能(相对于反对使用的功能)不调用error_handler函数?

linux - 在 Linux 上配置 PHP 框架

javascript - 无法获得所需的悬停状态