Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL/PHP-如何选中第二个查询以选中复选框_Php_Mysql - Fatal编程技术网

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

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"

我有两个问题。第一种方法是从一个表中获取一个值列表,以显示为复选框选项行。 第二个查询根据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。