如何在下拉列表中隐藏选定的值?
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 注入。
每次在 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 注入。