簡體   English   中英

如何在第1列和第2列的交叉點上填充第3列結果,這些列都來自用戶在下拉列表中選擇的同一個表?

[英]How can I populate a 3rd column result on intersections of 1st and 2nd columns all from the same table that are selected by the user on dropdown?

我有一個列vehicle_name,我想要2個其他列的下拉列表,即vehicle_type和vehicle_color。 當選擇並提交這兩個下拉值時,我希望它們的交集打印出來自vehicle_name的值。 到目前為止,我的代碼只為vehicle_type生成一個下拉列表,我需要另一個vehicle_colour下拉列表。 在提交時填充了vehicle_name的相交值。 我怎樣才能做到這一點?

<!DOCTYPE html>
<html>
<body>
<?php
echo "<br>";
echo "<br>";
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydb";


$db = new mysqli($servername, $username, $password, $dbname);


if (!$db) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '
        . mysqli_connect_error());
}
?>

<br>
<div class="label">Select vehicle type:</div>

<select name="payment_method">
    <option value = "">---Select---</option>
<?php
$queryusers = "SELECT DISTINCT vehicle_type FROM orders";
$db = mysqli_query($db, $queryusers);
while ($d=mysqli_fetch_assoc($db)) {
    echo "<option value='{".$d['vehicle_type']."}'>".$d['vehicle_type']."</option>";
}

?>
</select>


<br>
<div class="label_for_time">Select color:</div>

<select name="vehicle_color">
    <option value = "">---Select---</option>

<?php
$query_for_color = "SELECT DISTINCT vehicle_color FROM orders";
$db = mysqli_query($db, $query_for_date);
while ($a=mysqli_fetch_assoc($db)) {
    echo "<option value='{".$a['vehicle_color']."}'>".$a['vehicle_color']."</option>";
}

?>
</select>
<br>
<br>


<button class="go-btn" type="submit">Go</button>
</body>
</html>

由於我在上面的示例中沒有看到任何AJAX /客戶端代碼,我認為這是您正在執行的純后端端過濾。 您的代碼目前缺少我們需要的部分元素,但讓我們一起嘗試解決這個問題:

1.圍繞您的輸入形成

添加<form method="POST" target="path-to-your-script.php">其中“path-to-your-script.php”必須更改為PHP文件名或重寫的URL路徑。 這必須在<select>框周圍。

您也可以使用PHP_SELF自動設置它,這在大多數情況下都適用。 我使用html_entities($var)來避免通過操縱的URL進行任何代碼注入。

<form name="test" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

2.檢查POST變量'vehicle_type'

在表單中,檢查是否已搜索可用顏色:

<?php
  $query_for_color = "SELECT DISTINCT vehicle_color FROM orders";

  // check if the form variable 'vehicle_type' is available; if so, filter entries.
  if (isset($_POST['vehicle_type'])) {
    $vType= filter_var($_POST['vehicle_type'], FILTER_SANITIZE_STRING);
    $query_for_colors .= ' WHERE vehicle_type = \''.$vType.'\'';
  } 
  $db = mysqli_query($db, $query_for_date);
  while ($a=mysqli_fetch_assoc($db)) {
      echo "<option value='{".$a['vehicle_color']."}'>".$a['vehicle_color']."</option>";
  }
?>

編輯:

正如評論中的一個用戶所指出的, filter_var($var, FILTER_SANITIZE_STRING)不足以避免潛在的SQL注入。 這只是一個建議,根本不是問題的一部分。 如果必須使用用戶數據,請使用filter_var(),而不是使用預准備語句或正確轉義用戶數據。 有很多這樣的教程可以指導您進行安全查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM