如何在下拉列表中隐藏选定的值?

How to hide selected value in dropdown?

每次在 select 下拉列表中选择一个值时,我总是得到错误的结果。我希望这个过程是这样的,在 selecting 一个 busnum(公交车号码)之后,下一个下拉列表将显示可用的座位号(基于 busnum、预定日期和预定时间)除了那些数字是已经采取。但是每次我 运行 我的代码时,它都会显示可用的座位,但当该 busnum 有多个座位时,它只会隐藏一个座位号(已占用)。例如,我 select busnum 30,那么 busnum 30 已经有 3 个座位(1、3、9)所以如果我单击下一个下拉菜单(用于座位号),它应该隐藏 1、3、9满分 15。但它只隐藏了 1,而 3 和 9 仍然显示。 到目前为止,这是我那部分的代码:

 $sel = "SELECT * FROM ticket";
  $rslt = mysqli_query($conn, $sel);
  if($rslt->num_rows>0)
  {
      while($rows = $rslt->fetch_assoc())
      {

    $date = $rows['Tk_Sch_Date'];
    $time = $rows['Tk_Sch_Time'];

    $sel2 = "SELECT * FROM ticket WHERE Bus_Plate_Number='".$_GET['busnum']."' AND Tk_Sch_Date = '".$date."' AND Tk_Sch_Time='".$time."' AND Tk_Stat = 'PAID'";
    $rslt = mysqli_query($conn, $sel2);
    if($rslt->num_rows>0)
    {
      while($data = $rslt->fetch_assoc())
      {
        $chsnseat = $data['Tk_Chsn_Seat'];

        $sel3 = "SELECT * FROM seat WHERE NOT Seat_Num ='".$chsnseat."'";
        $result = mysqli_query($conn, $sel3);
        if($result->num_rows>0)
        {
          while($rows=$result->fetch_assoc())
          {
            ?>
            <option value="<?=$rows['Seat_Num']?>"><?=$rows['Seat_Num']?></option>
            <?php
          }
        }
      }
    }
  }


}
  else
  {
          $sel = "SELECT * FROM seat";
          $result = $conn->query($sel);
          if($result->num_rows>0)
          { 
            while ($rows = $result->fetch_assoc())
            {
              ?>
              <option value="<?php echo $rows['Seat_Num']; ?>"><?php echo $rows['Seat_Num']; ?>
              </option>
              <?php
            }
          }
  }
}

您一次只能过滤掉一个席位。因此,在第一次迭代中,您过滤掉了座位 1,但显示了座位 3 和 9。在第二次迭代中,您过滤掉了 3,但显示了 1 和 9。依此类推。

您需要加入表格,以便一次过滤掉所有已占用的座位。

$sel2 = "
    SELECT s.*
    FROM seat AS s
    LEFT JOIN ticket AS t ON s.seat_num = t.Tk_Chsn_Seat
        AND Bus_Plate_Number=? AND Tk_Sch_Date = ? AND Tk_Sch_Time= ? AND Tk_Stat = 'PAID'
    WHERE t.Tk_Chsn_Seat IS NULL";
$stmt = $conn->prepare($sel2);
$stmt->bind_param("sss", $_GET['busnum'], $date, $time);
$stmt->execute();
$result = $stmt->get_result();

您还应该使用准备好的语句而不是将变量替换到 SQL 中,以防止 SQL 注入。