2012-06-18 2 views
0

У меня есть 2 таблицы в базе данных, один называется productBrands, а другой products.Echo другой результат в зависимости от выбранного значения php

Теперь я хочу отследить результат Продукции в зависимости от того, какой марки я выбрал.

У меня есть основы для работы, но я не уверен, как проверить, какой бренд выбран.

 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/>'; 

Это печатает правильные значения, но не принимает того, что выбрано первым.

+0

Итак, просто чтобы понять, как вы ожидаете, что пользователь будет взаимодействовать с этим ... Вы ожидаете отобразить раскрывающееся меню с брендами в нем. Пользователь выбирает бренд, а затем продукты в этом бренде должны заполняться ниже? – dodexahedron

+0

Да exatly dodexahedron – oBo

ответ

1

Попробуйте это изменить:

$brandsQuery = "SELECT * FROM productBrands"; 

к этому:

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

Это вставит бренд, который вы просили у пользователя, и не будет производить все результаты, только продукты, относящиеся к указанная марка.

Примечание: Вышеупомянутое предполагает, что вы получили значение $brand из выпадающего списка, упомянутого в комментарии.

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/>'; 
0

Есть три общих способа справиться с этим.

1) Напишите это как форму и отправьте обратно выбранное значение. Помните, что PHP только серверная, поэтому сервер не знает, что делает пользователь на странице.

2) Используйте jQuery или некоторые другие способы выполнения обратного вызова AJAX для другого действия на сервере при выборе бренда. Результатом этого обратного вызова является информация, которую вы хотите заполнить для остальной части страницы.

3) Если набор данных относительно невелик, вы можете загрузить все данные, загруженные на страницу, в виде массива javascript, а затем обработать остальные в javascript на странице.

Вариант № 2, вероятно, ваш лучший выбор, все вокруг. Вариант №1, скорее всего, будет проще для новичка, чтобы его реализовать. Используйте только параметр №3, если набор данных относительно невелик.

Смежные вопросы