根据选择的值取决于不同的结果

时间:2012-06-18 12:07:10

标签: php loops option selected

我在数据库中有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/>';

这会打印出正确的值,但不会选择先选择的值。

3 个答案:

答案 0 :(得分:1)

尝试更改此内容:

$brandsQuery = "SELECT * FROM productBrands";

到此:

$brandsQuery = sprintf("SELECT * FROM productBrands WHERE brandname = '%s'", 
                                           mysql_real_escape_string($brand));

这将插入您询问用户的品牌,并且不会生成所有结果,只会插入与指定品牌相关的产品。

注意:以上假设您从评论中提到的保管箱中获得了$brand值。

答案 1 :(得分:0)

假设这是表单(或提交的某个过滤器)的一部分,并且您使用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/>';

答案 2 :(得分:0)

有三种常见方法可以解决这个问题。

1)将其写为表格并回发所选值。请记住,PHP仅是服务器端,因此服务器不知道用户在页面上执行的操作。

2)选择品牌时,使用jQuery或其他一些方法对服务器上的其他操作执行AJAX回调。此回调的结果是您要为页面的其余部分填写的信息。

3)如果数据集相对较小,您可以将所有数据作为javascript数组加载到页面中,然后在页面上的javascript中处理其余数据。

选项#2可能是你最好的选择。 但是,选项#1对于初学者来说可能更容易实现。 如果数据集相对较小,则仅使用选项#3。