繁体   English   中英

MYSQL / PHP - 如何检查第二个查询以检查复选框

[英]MYSQL / PHP - How to check a 2nd query to check checkboxes

我有 2 个查询。 第一个从一个表中获取值列表以显示为复选框选项行。 第二个查询根据用户 ID 从另一个表中获取所有日期。

$query = $con -> prepare ("SELECT * FROM Periods");
$query -> execute();
$query2 = $con -> prepare ("SELECT * FROM Availability WHERE Users_user_id = :userid");
$query2 ->bindParam(':userid',$user_id, PDO::PARAM_STR);
$query2 -> execute();

然后我将 $query1 的值显示为:

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo  "<div class='form-check form-check-inline'>
        <input class='form-check-input' type='checkbox' name='periods[]' value='".$row['P_Title']." ' checked>
            <label class='form-check-label nowrap'>".$row['P_Title']."</label>
                </div>";
  }

在第 3 行的末尾,我有 'checked> 这基本上只是检查每个复选框。但是我需要用一些代码替换它以检查第二个查询是否包含相同的 ID,如果是,请选中该框,否则不要选中它。

因此,Periods 表有一个 P_ID,Availability 表有一个 P_ID (FK),因此在显示 Periods 列表时,我需要检查 P_ID 是否也在 Availability 表中并选中复选框。

希望我解释正确。

您需要做的是执行UNION ALL以组合两个表的结果,然后围绕在table1.id === table2.id时设置复选框的选中属性的语句旋转逻辑。

例子:

<?php
$sql  = "SELECT * FROM Periods";
$sql .= "UNION ALL";
$sql .= "SELECT * FROM Availability WHERE Users_user_id = :user_id";

$query = $con -> prepare ($sql);
$query ->bindParam(':userid',$user_id, PDO::PARAM_STR);
$query -> execute();

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo   "<div class='form-check form-check-inline'>
                <input class='form-check-input' type='checkbox' name='periods[]' value='".$row['P_Title']."'"; if($row['Periods.P_ID'] === $row['Availability.P_ID']){ echo "checked"; } echo " />
                <label class='form-check-label nowrap'>".$row['P_Title']."</label>
            </div>";
}
?>

如果它们在两个表中重复出现,您还需要为另一个$row['some_field']指定表。

我最终使用了 2 个查询和一个 in_array function:

  $user_id = $_SESSION['user_id'];
     
$sql = "SELECT * FROM Periods";
$sql2 = "SELECT Periods_P_ID  FROM Availability WHERE Users_user_id = :user_id";     
$squery2 = $con -> prepare ($sql2);
$squery2 -> bindParam(':user_id',$user_id, PDO::PARAM_INT);
$squery2 -> execute();
  
while ($row2=$squery2->fetch(PDO::FETCH_ASSOC)){
       $ids[] = $row2['Periods_P_ID'];
   }

$query = $con -> prepare ($sql);
$query -> execute();

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
   echo  "<div class='form-check form-check-inline'>
       <input class='form-check-input' type='checkbox' name='periods[]' value='".$row['P_Title']."'"; 
   if (in_array($row['P_ID'], $ids)){ echo "Checked"; } echo ">
             <label class='form-check-label nowrap'>".$row['P_Title']."</label>
             </div>";
  }

因此,这具有预期的效果。 下一个任务是更新可用性表以插入新的选中项目或删除当前未选中的项目。 希望这会更容易:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM