Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复选框,使用多对多关系_Php_Html_Checkbox_Foreach - Fatal编程技术网

Php 复选框,使用多对多关系

Php 复选框,使用多对多关系,php,html,checkbox,foreach,Php,Html,Checkbox,Foreach,我试图创建一个管理表单,允许用户选择他们的需求,并使用多对多关系保存到数据库。我可以使用下面的while循环生成表单项并提交它们 while ($rows = $equipresults->fetch()) { $eqid = $rows['req_id']; $eqname = $rows['requirement']; echo " <label class='checkbox'> <input type='checkbox' name='requirement[]'

我试图创建一个管理表单,允许用户选择他们的需求,并使用多对多关系保存到数据库。我可以使用下面的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>
";}
我试图根据上面的数组显示以下内容

我一直在玩一个foreach循环,但我就是无法设法选中复选框。如何循环上面的数组,如果artistid=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。这里的任何指导都将不胜感激。我也相信可能有一种非常简单的方法可以做到这一点

您需要一个条件语句来查看变量是否设置为输入字段的名称,该字段来自$\u POST[]或$row[]数组,如果设置,则在输入字段中回显选中的属性。如果要动态创建输入列表,则需要对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'; }>
例如:

<?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
    }
?>

我在这里有点迷路了。您的第三个代码示例是否应该替换第一个示例中while循环中的代码?是的-抱歉,第一个代码片段演示了我可以简单地从数据库中呈现选项,我希望在页面加载时根据数据库中的值显示复选框。e、 g.数组显示每个选定需求的用户ID。我想显示复选框,因为这两项是这个用户所必需的。那么,您是否尝试在while循环中使用第三个代码示例,就像第一个一样?您忽略了代码中的一些重要部分,$equipresult在第三个示例中来自何处,它包含什么?你能编辑你的问题以显示应该呈现复选框的代码的完整示例吗?根据请求更新问题我认为你需要这样做:在数组$row中,$req['req_id'],但我不太确定。你能试一试吗?嗨,Railson,谢谢你,我已经能够实现了,但是我唯一的问题是数组中的三元函数。基于上面的数组示例,我能够将值存储在$checkedOptions中,当我打印输出时,我得到数组[0]=>1[2]=>3。但是三元函数没有检查值?如果你仔细看看OP发布的代码,你会发现他正试图用以前设置的值来做这件事。
<?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
    }
?>