【问题标题】:Checkboxes, using a many to many relationship php复选框,使用多对多关系 php
【发布时间】:2020-03-15 02:53:45
【问题描述】:

我正在尝试创建一个管理表单,允许用户选择他们的需求并使用多对多关系保存到数据库。我可以使用下面的while循环生成表单项并提交这些

while ($rows = $equipresults->fetch()) {
$eqid = $rows['req_id'];
$eqname = $rows['requirement'];
echo "
<label class='checkbox'>
<input type='checkbox' name='requirement[]' value='$eqid'> $eqname 
</label><br>
";}

上面的代码产生了这个:

当我提交后返回表单时,未选中复选框,即使值已添加到数据库中。我明白为什么上面没有返回任何东西。

所以我的问题是如何编写一个循环,允许我将复选框显示为已选中的数组,类似于下面?

    $equipresult = array ( 
[0] => Array ( [artistid] => 2 [req_id] => 1 [requirement] => Microphone ) 
[1] => Array ( [artistid] => [req_id] => 2 [requirement] => Table ) 
[2] => Array ( [artistid] => 2 [req_id] => 3 [requirement] => Chair ) 
[3] => Array ( [artistid] => [req_id] => 4 [requirement] => Microphone Stand ) 
[4] => Array ( [artistid] => [req_id] => 5 [requirement] => Personal Artifacts ) 
[5] => Array ( [artistid] => [req_id] => 6 [requirement] => Set Dressing ) 
[6] => Array ( [artistid] => [req_id] => 7 [requirement] => Raised Step )
[7] => Array ( [artistid] => [req_id] => 8 [requirement] => Other ) ) 

我正在尝试根据上面的数组显示以下内容

我一直在玩一个 foreach 循环,但我无法让复选框被选中。如何循环遍历上述数组,如果艺术家 ID = 2,当 foreach 循环生成

$req=explode(",",$rows['requirement']);

if (!empty($equipresult)) {
    foreach ($equipresult as $row) {
      $checked = (in_array($row, $req)) ? 'checked="checked"' : '';
  ?>
            <label class='checkbox'>
                <input type="checkbox" name="requirement[]" value="<?php echo $row;?>"
                    <?php $checked;?>><?php echo implode(", ", $row);?>
            </label><br>
            <?php

}
}
?>

最终我试图避免对 html 进行硬编码。这里的任何指导将不胜感激。我也确信可能有一种非常简单的方法可以做到这一点。

【问题讨论】:

  • 我有点迷路了。您的第三个代码示例是否应该替换第一个中 while 循环中的代码?
  • 是 - 抱歉,第一个代码 sn-p 表明我可以简单地呈现数据库中的选项,我希望在页面加载时根据值将框显示为“已选中”在数据库中。例如该数组显示每个选定需求的用户 ID。我希望将复选框显示为选中此用户需要这两个项目
  • 那么,您是否尝试像第一个一样在while 循环中使用第三个代码示例?您省略了代码的重要部分 - 第三个示例中的$equipresult 来自哪里,它包含什么?您可以编辑您的问题以显示应该呈现选中框的代码的完整示例吗?
  • 已按要求更新问题
  • 我认为你需要这个:in_array($row, $req['req_id']),但我不太确定。可以试试吗?

标签: php html checkbox foreach


【解决方案1】:

例子:

<?php
$options =  [
    ["artistid" => 1,  "req_id" => 1,  "requirement" => "Microphone"],
    ["artistid" => 1,  "req_id" => 2,  "requirement" => "Table"],
    ["artistid" => 1,  "req_id" => 3,  "requirement" => "Chair"],
    ["artistid" => 1,  "req_id" => 4,  "requirement" => "Microphone Stand "],
    ["artistid" => 1,  "req_id" => 5,  "requirement" => "Personal Artifacts"],
    ["artistid" => 1,  "req_id" => 6,  "requirement" => "Set Dressing"],
    ["artistid" => 1,  "req_id" => 7,  "requirement" => "Raised Step "]
];
$checkedOptions = [2, 7];

foreach ($options as $option) {
    ?>
    <label class='checkbox'>
        <input type="checkbox" name="requirement[]" value="<?= $option['req_id']?>" <?= in_array($option['req_id'], $checkedOptions)  ? 'checked' : '' ?> >
           <?= $option['requirement'] ?>
    </label>
            <br>
<?php
    }
?>

【讨论】:

  • 嗨 Railson,谢谢你,我已经能够实现,但我遇到的唯一问题是数组中的三元函数。根据我上面的数组示例,我可以将值存储在 $checkedOptions 中,当我打印出来时,我得到Array ( [0] =&gt; 1 [2] =&gt; 3 )。但是三元函数不检查值?
【解决方案2】:

您需要一个条件语句来查看变量是否设置为来自$_POST[]$row[] 数组的输入字段的名称,如果设置回显输入字段中的checked 属性。如果您要动态创建输入列表,则需要对 value 属性执行相同操作。

<input type='checkbox' name='microphone' value='$eqid' <?php if($eqname === "microphone"){ echo 'checked'; }> 
<input type='checkbox' name='table' value='$eqid' <?php if($eqname === "table"){ echo 'checked'; }> 
<input type='checkbox' name='chair' value='$eqid' <?php if($eqname === "chair"){ echo 'checked'; }>
<input type='checkbox' name='microphone_stand' value='$eqid' <?php if($eqname === "microphone_stand"){ echo 'checked'; }> 
<input type='checkbox' name='personal_artifacts' value='$eqid' <?php if($eqname === "personal_artifacts"){ echo 'checked'; }> 
<input type='checkbox' name='set_dressing' value='$eqid' <?php if($eqname === "set_dressing"){ echo 'checked'; }>    
<input type='checkbox' name='raised_step' value='$eqid' <?php if($eqname === "raised_step"){ echo 'checked'; }> 
<input type='checkbox' name='other' value='$eqid' <?php if($eqname === "other"){ echo 'checked'; }>

【讨论】:

  • 如果您仔细查看 OP 发布的代码,您会发现他正在尝试这样做(使用 &lt;?php $checked;?&gt; 和先前设置的值)。
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多