我有两个标签,第一个是选择品牌,第二个是选择产品。
我的问题/问题是我想告诉php在第二个select标签内回显。 echo
ed选项需要与第一个标记中的所选选项具有相同的brand_name
。
我需要的是,如果我选择阿迪达斯作为品牌,php会显示每件产品都有brand_name
阿迪达斯。
我有两个不同的数据库表,第一个名为brand
:
brand_id | brand_name
1 | ADIDAS
2 | NIKE
第二个叫product
:
product_id | brand_name | product_name | product_image | amount | sell | buy
1 | ADIDAS | T-Shirt | none | 50 | 30 | 28
2 | NIKE | Shoes | none | 20 | 130 | 120
这是我的代码:
<select>
<option disabled selected>----SELECT----</option>
<?php
require_once 'connections/dbc.php';
$query = "SELECT `brand_name` FROM `brands`";
$response = @mysqli_query($conn, $query);
if (!$response) {
$_SESSION['errortitle'] ='Error loading the brands';
$_SESSION['errormessage'] = 'Something wrong happend while loading the brands.<br/>Please contact The developer';
header("location: error.php");
exit();
} else {
while($row = mysqli_fetch_array($response)){
echo '<option name="brand_name" value='.$row['brand_name'].'>'.$row['brand_name'].'</option>';
}
}
?>
</select>
<select>
<option disabled selected>----SELECT----</option>
<?php
require_once 'connections/dbc.php';
###########HERE WHERE I NEED MY CODE##############
$query = "SELECT `product_name` FROM `product WHERE brand_name = "##### The selected option from the first select tag" ";
$response = @mysqli_query($conn, $query);
if (!$response) {
$_SESSION['errortitle'] = "Error loading the prouducts";
$_SESSION['errormessage'] = 'Something wrong happend while loading the proudcts.<br/>Please contact The developer';
header("location: error.php");
exit();
} else {
while($row = mysqli_fetch_array($response)){
echo '<option name="product_name" value='.$row['product_name'].'>'.$row['product_name'].'</option>';
}
}
?>
</select>
答案 0 :(得分:0)
最简单的方法是使用一个SELECT
和LEFT JOIN
来同时获取两个表中的所有列:
SELECT brands.brand_name, products.product_name FROM brands LEFT JOIN products on brands.brand_name = products.brand_name GROUP BY brands.brand_name
从该单个查询构建两个<select>
个节点。为此,请从查询中构建您的第一个<select>
节点,与您现在一样,然后在代码的下半部分重置$response
$response->data_seek(0)
。然后,您可以构建第二个<select>
,就像您已经完成了另一个查询一样。
它看起来像下面的代码。您的原件只有两处小改动。在顶部查找一些注释,在底部查看一些注释。我没有一个简单的机制来运行PHP,所以我无法测试它,它可能不会像现在一样完美运行。但我认为这会让你知道该怎么做。
<select>
<option disabled selected>----SELECT----</option>
<?php
require_once 'connections/dbc.php';
// Notice that the query includes LEFT JOIN, to get the
// columns from both tables in a single query.
$query = "SELECT brands.brand_name, products.product_name
FROM brands left join products on brands.brand_name = products.brand_name"
$response = @mysqli_query($conn, $query);
if (!$response) {
$_SESSION['errortitle'] ='Error loading the brands';
$_SESSION['errormessage'] = 'Something wrong happend while loading the brands.<br/>Please contact The developer';
header("location: error.php");
exit();
} else {
while($row = mysqli_fetch_array($response)){
echo '<option name="brand_name" value='.$row['brand_name'].'>'.$row['brand_name'].'</option>';
}
}
?>
</select>
<select>
<option disabled selected>----SELECT----</option>
<?php
require_once 'connections/dbc.php';
// Here, you don't need another query. You simply reset
// $response, and then fetch as you would from a
// normal query.
$response->data_seek(0);
while($row = mysqli_fetch_array($response)){
echo '<option name="product_name" value='.$row['product_name'].'>'.$row['product_name'].'</option>';
}
?>
</select>
答案 1 :(得分:0)
有两种选择:
首先:下载“产品”表格的所有内容,然后制作一个脚本,将带有选定“品牌”属性的项目添加到框中。
第二:(推荐)当用户选择品牌时,进行AJAX查询,并获得所选品牌的所有商品。
第二个要好得多,因为您需要下载更少的数据,并且页面加载速度会更快。
想象一下,你有10 ^ 9个产品,10 ^ 7个品牌(每个品牌平均100个产品)
使用第一个解决方案,您需要下载所有10 ^ 9产品,然后使用JavaScript(速度不是很快)来选择其中的100个。
如果你使用第二种解决方案,两件事情会好得多:
1.下载100项而不是10 ^ 9
2.选择项目使用快速SQL引擎而不是慢速JavaScript
使用php是不可能的,因为php是服务器端的。服务器使用php制作页面代码,然后将其发送给用户。没有AJAX就不可能回调php
答案 2 :(得分:0)
您可以简单地使用Ajax来执行此操作。我会尝试逐步解释。 我假设jQuery已加载。 您的产品表应使用brand_id而不是brand_name。
product_id|brand_name | product_name | product_image | amount | sell | buy
1 |brand_name_1| T-Shirt | none | 50 | 30 | 28
2 |brand_name_2| Shoes | none | 20 | 130 | 120
我希望这会对你有所帮助。
步骤 - 使用name或id属性创建第一个和第二个选择框。我将使用该名称来定义它们。
<select name="brand_name">
<?php //call brand_name options from your database
//Sample : <option value="brand_name_1">Brand_Name_1</option>?>
</select>
<select name="product_name" disabled >
<?php //dont fill this select box.
//Leave it empty, contents will be created after our ajax call
?>
</select>
步骤 将jQuery脚本添加到您的页面,如下所示。
<script>
$('[name="brand_name"]').change(function(event){
var brand_name = $(this).val();
$.get(
"ajax.php",
{ brand_name: brand_name },
function(data) {
var opts = $.parseJSON(data);
$.each(opts, function(i, d) {
$('[name="product_name"]').append($('<option>', {
value: d.product_name,
text : d.product_name
}));
});
//Enable the product_name select box
$('[name="product_name"]').prop('disabled', false);
//Refresh the product_name select box
$('[name="product_name"]').selectpicker('refresh');
}
);
});
</script>
步骤 - ajax.php必须如下所示。我在这里使用了你的php查询代码。
<?php
require_once 'connections/dbc.php';
$getBrandName = $_REQUEST['brand_name']; // This is the id of the selected brand name
$query = "SELECT product_name FROM product WHERE brand_id = '$getBrandName' ";
$response = @mysqli_query($conn, $query);
if (!$response) {
$_SESSION['errortitle'] = "Error loading the prouducts";
$_SESSION['errormessage'] = 'Something wrong happend while loading the proudcts.<br/>Please contact The developer';
//Below Header method will not work cause headers are already been set. You will not be able to redirect page. So just delete it. instead you can return an error by using the json.
header("location: error.php");
exit();
} else {
while($row = mysqli_fetch_array($response)){
$prodyctsArray[]['name'] = $row['product_name'];
}
echo json_encode($brandName);
}
?>
如需了解更多信息,建议您访问以下参考资料:
jQuery.ajax()
jQuery.get()
Introducing JSON