MYSQL/PHP-如何选中第二个查询以选中复选框
我有两个问题。第一种方法是从一个表中获取一个值列表,以显示为复选框选项行。 第二个查询根据userid从另一个表获取所有日期MYSQL/PHP-如何选中第二个查询以选中复选框,php,mysql,Php,Mysql,我有两个问题。第一种方法是从一个表中获取一个值列表,以显示为复选框选项行。 第二个查询根据userid从另一个表获取所有日期 $query = $con -> prepare ("SELECT * FROM Periods"); $query -> execute(); $query2 = $con -> prepare ("SELECT * FROM Availability WHERE Users_user_id = :userid"
$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>";
}
while($row=$query->fetch(PDO::fetch\u ASSOC)){
回声“
“$row['P_Title']”
";
}
在第三行的末尾,我选择了“checked>,这基本上只是检查每个复选框。但是我需要用一些代码来替换它,以检查第二个查询是否包含相同的ID,如果是,请选中该复选框,否则将其保留为未选中状态
因此,时段表有一个p_ID,可用性表有一个p_ID(FK),因此在显示时段列表时,我需要检查p_ID是否也在可用性表中,并选中复选框
希望我解释得正确。您需要做的是执行一个
UNION ALL
来组合两个表的结果,然后围绕一个语句旋转逻辑,该语句在table1.id==table2.id
时设置复选框的checked属性
示例:
<?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>";
}
?>
我最终使用了两个查询和一个in_数组函数:
$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>";
}
$user\u id=$\u会话['user\u id'];
$sql=“选择*从期间”;
$sql2=“从可用性中选择时段\u P\u ID,其中Users\u user\u ID=:user\u ID”;
$squery2=$con->prepare($sql2);
$squery2->bindParam(':user_id',$user_id,PDO::PARAM_INT);
$squery2->execute();
而($row2=$squery2->fetch(PDO::fetch_ASSOC)){
$ids[]=$row2['Periods\u P\u ID'];
}
$query=$con->prepare($sql);
$query->execute();
while($row=$query->fetch(PDO::fetch_ASSOC)){
回声“
“$row['P_Title']”
";
}
因此,这具有预期的效果。
下一个任务是更新可用性表,以插入新的已选中项,或者删除已取消选中的当前项。希望这会更容易:)您需要在选择中执行联合
,以合并两个表的结果。然后您只需执行if($row['table1\u field\u id']===$row['table2\u field\u id']){echo'checked';}
谢谢Martin。我尝试了您的解决方案,但mysql正在返回第1列的数据:P_ID 1 2 3 4 1 4 PK和FK的名称是否完全相同?因为此时需要在名称旁边定义表,否则它不知道它是哪个id。