【问题标题】:Loop through checkboxes and display checked if 'ID'=='ID'如果 'ID'=='ID' 则循环检查复选框并显示检查
【发布时间】: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 的输出?

我假设我需要使用某种循环(可能是foreachwhile,而不是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


【解决方案1】:

我不确定我是否收到您的消息。但让我解释一下我得到了什么。

您要选择 id 在emp_skill 表中的skill_id 列中的复选框。

我认为您可以选择员工的所有技能 ID 并遍历技能,然后检查技能 ID 是否在员工技能中

下面是实现:

$employeeSkillIds = array_column($emp_skill, 'skill_id');

<?php foreach($skills as $skill) :?>
      <span class="description">
          <input  id="customCheck1" type="checkbox" name="skills[]" value="<?= $skill['skill_id'];?>" 
          <?= in_array($skill['skill_id'],$employeeSkillIds) ? 'checked="checked"' : '' ;?>>
          <label class=" badge badge-warning" for="customCheck1"><?=$skill["skill_name"]?></label>
     </span>
 <?php endforeach;?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多