我在数据库中有 2 个表,一个称为 productBrands
,另一个products
。
现在我想根据我选择的品牌来回显产品的结果。
我掌握了工作的基本知识,但我不确定如何测试选择了哪个品牌。
echo '
Brand:<br><select name="brand">';
$brandsQuery = "SELECT * FROM productBrands";
$brands = mysql_query($brandsQuery) or
die("SQL: $brandsQuery)<br />".mysql_error());
$brandsNo = mysql_num_rows($brands);
echo '<option value="" selected>Choose a brand...</option>';
for ($i = 0; $i < $brandsNo; $i++) {
$name = mysql_result($brands, $i, 'name');
$brandid = mysql_result($brands, $i, 'id');
echo '<option value="' . $brandid . '">' . $name . '</option>';
}
echo '</select><br/>';
echo 'Produkt:<br><select name="produkt">';
$productsQuery = "SELECT * FROM products";
$products = mysql_query($productsQuery) or
die("SQL: $productsQuery)<br />".mysql_error());
$productsNo = mysql_num_rows($products);
$brandQuery = "SELECT productBrand from products";
for ($f = 0; $f < $productsNo; $f++ ) {
$productName = mysql_result($products, $f, 'productName');
$productId = mysql_result($products, $f, 'productId');
echo '<option value="' .$productId .'">' . $productName .'</option>';}
echo '</select><br/>';
这将打印出正确的值,但不会考虑首先选择的值。
尝试更改以下内容:
$brandsQuery = "SELECT * FROM productBrands";
对此:
$brandsQuery = sprintf("SELECT * FROM productBrands WHERE brandname = '%s'",
mysql_real_escape_string($brand));
这将插入您要求用户输入的品牌,并且不会生成所有结果,只会生成与指定品牌相关的产品。
注意:上述假设您从评论中提到的保管箱中获取了$brand
值。
假设这是表单(或提交的某个过滤器)的一部分,并且您正在使用 POST 提交表单,您必须扩展脚本的第二部分:
echo 'Produkt:<br><select name="produkt">';
$whereBrand = '';
if(isset($_POST['brand']) $where = " WHERE productBrand = '".mysql_real_escape_string($_POST['brand'])."'";
$productsQuery = "SELECT * FROM products{$whereBrand}";
$products = mysql_query($productsQuery) or
die("SQL: $productsQuery)<br />".mysql_error());
$productsNo = mysql_num_rows($products);
for ($f = 0; $f < $productsNo; $f++ ) {
$productName = mysql_result($products, $f, 'productName');
$productId = mysql_result($products, $f, 'productId');
echo '<option value="' .$productId .'">' . $productName .'</option>';
}
echo '</select><br/>';
有三种常见的方法可以解决这个问题。
1) 将其写为表单并回发所选值。 请记住,PHP 只是服务器端的,因此服务器不知道用户在页面上做了什么。
2) 当选择品牌时,使用 jQuery 或其他一些方式对服务器上的另一个操作执行 AJAX 回调。 此回调的结果是要为页面的其余部分填写的信息。
3)如果数据集相对较小,您可以将所有数据作为javascript数组加载到页面中,然后在页面上的javascript中处理其余数据。
选项#2可能是你最好的选择,到处都是。但是,选项#1对于初学者来说可能更容易实现。仅当数据集相对较小时,才使用选项 #3。