[英]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.