Php 复选框,使用多对多关系
我试图创建一个管理表单,允许用户选择他们的需求,并使用多对多关系保存到数据库。我可以使用下面的while循环生成表单项并提交它们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 ($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
}
?>