根据所选 php 的值回显不同的结果


Echo different result depending on the value selected php

我在数据库中有 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。