【发布时间】:2019-12-21 20:47:30
【问题描述】:
我对 PHP 还很陌生。我有一个名为createemployee.php 的页面,它使用for 循环来显示用于定义员工技能集的复选框,以下代码有效:
<?php for($i = 0; $i < count($skills); $i++):?>
<span class="description">
<input id="customCheck1" type="checkbox" name="skills[]" value="<?=$skills[$i]['skill_id'];?>">
<label class=" badge badge-warning" for="customCheck1"><?=$skills[$i]["skill_name"]?></label>
</span>
<?php endfor;?>
我正在尝试为editemployee.php 创建一个页面,其中加载了特定员工的详细信息并可供用户编辑。如果复选框被选中,我想显示选中的值。
我正在使用链接表来允许一名员工拥有多种技能,如下所示:
CREATE TABLE emp_skill (
emp_skill_id INT PRIMARY KEY UNSIGNED AUTO_INCREMENT,
emp_id INT UNSIGNED,
skill_id INT UNSIGNED,
FOREIGN KEY emp_id REFERENCES employee(`emp_id`),
FOREIGN KEY skill_id REFERENCES skill(`skill_id`)
);
如果我像这样嵌套for 循环(这是错误的,但是 testing=learning 并且它给了我一个类似于我想要的输出),输出打印时选择了正确的复选框,但是数据被拿走了from Skill 每次等于 emp_skill 时都会重复(由于嵌套了 for 循环)。
<?php for($j = 0; $j < count($emp_skill); $j++):?>
<?php for($i = 0; $i < count($skills); $i++):?>
<span class="description">
<input id="customCheck1" type="checkbox" name="skills[]" value="<?=$skills[$i]['skill_id'];?>"
<?php if ($skills[$i]["skill_id"]==$emp_skill[$j]['skill_id']) echo 'checked="checked"';?>>
<label class=" badge badge-warning" for="customCheck1"><?=$skills[$i]["skill_name"]?></label>
</span>
<?php endfor;?>
<?php endfor;?>
如果 $skill.skill_id 与 $emp_skill.skill_id 中的一行匹配,我如何输出检查值而不复制网页上 $skill 的输出?
我假设我需要使用某种循环(可能是foreach 或while,而不是for)。
【问题讨论】:
-
你是如何创建
$emp_skill和$skills的?此外,它与您的问题无关,但您做错的一件事(在创建和编辑页面中)是id="customCheck1"。每个 HTML 元素都应该有一个唯一的 id。您对所有复选框使用相同的 id。如果您使用 Javascript 并希望通过 id 将事件附加到复选框,这将成为问题。 -
谢谢@Patrick-Q,我将分开 id 的 :) 我正在使用准备好的语句从两个单独的 emp_skill 和技能选择查询中获取结果,如下所示: ... while($stmt ->fetch()) { $skills[] = array("skill_id" => $skill_id, "skill_name" => $skill_name); $stmt->关闭(); }
标签: php mysql for-loop checkbox