【问题标题】:How to hide selected value in dropdown?如何在下拉列表中隐藏选定的值?
【发布时间】:2021-12-17 12:13:10
【问题描述】:

每次在选择下拉菜单中选择一个值时,我总是得到错误的结果。我希望这个过程是这样的,在选择一个 busnum(公交车号)后,下一个下拉菜单将显示可用的座位号(基于 busnum、sched date 和 sched time),除了那些已经被占用的号码。但是每次我运行我的代码时,它都会显示可用的座位,但是当那个 busnum 有多个座位时,它只会隐藏一个座位号(被占用)。例如,我选择 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
            }
          }
  }
}

【问题讨论】:

标签: php dropdown


【解决方案1】:

您一次只过滤掉一个座位。所以在第一次迭代中,您过滤掉座位 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 注入。

【讨论】:

  • 您的查询是正确的,但我刚刚意识到 $date 和 $time 不应取自数据库,而应取自 $_SESSION 中存储的数据。您知道如何获取这些存储的数据并将其放入其中一个参数中吗?
  • $date = $_SESSION['date']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2012-08-29
  • 2015-10-29
相关资源
最近更新 更多