2015-02-25 2 views
0

Я работаю над этим в течение многих часов безрезультатно.поиск mysql с использованием флажков?

Я пытаюсь создать расширенную функцию поиска для моего сайта с помощью PHP и mysql.

расширенный поиск только имеет в нем флажки.

флажками выглядеть следующим образом:

<form action="search.php" method="POST" id="myForm"/> 

<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="small"/></td> 
    <td>Small</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="large"/></td> 
    <td>Large</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="xlarge"/></td> 
    <td>X-Large</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="xxlarge"/></td> 
    <td>XX-Large</td> 
    </tr> 

    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
     <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="red"/></td> 
    <td>Red</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="black"/></td> 
    <td>Black</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type="checkbox" name="keyword[]" value="white"/></td> 
    <td>White</td> 
    </tr> 
</table> 

<input type="submit" value="submit" /> 
</form> 

моя база данных MYSQL выглядит следующим образом:

продукты таблица:

id product_name price 
5  shirt  20 
6  shoe   70 

У меня есть таблица атрибутов, где я хранить цвета и размер продуктов.

эта таблица выглядит следующим образом:

idc id product_name colors sizes 
1  5  shirt  red  
2  5  shirt  back 
3  5  shirt  white 
4  5  shirt    small 
5  5  shirt    medium 
6  5  shirt    Large 
7  6  shoe   brown 
8  6  shoe   black 
9  6  shoe     5 
10 6  shoe     6 
11 6  shoe     7 

на моей странице search.php, у меня есть этот код:

include "config/connect.php"; 
$searchList = ""; 


foreach($_POST['keyword'] as $c){ 
$sql ="SELECT * 
FROM `yt` 
INNER JOIN `ATTRIBUTES` ON yt.id= ATTRIBUTES.id 
WHERE (
    ATTRIBUTES.size LIKE '%".$c."%' OR 
    ATTRIBUTES.color LIKE '%".$c."%' 
    )"; 
$query = mysqli_query($db_conx, $sql); 
} 

//var_dump($query); 

$productCount = mysqli_num_rows($query); 
$i=0; // count the output amount 
if ($productCount > 0) { 
    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
      $id = $row["id"]; 
      $product_name = $row["product_name"]; 
      $searchList .= ''.$product_name.''; 
    } 
} 

приведенный выше код не возвращает ничего, и я продолжайте получать эту ошибку:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given 

что означает, что есть somethi ng не удалось после моего запроса sql!

поэтому я сделал var_dump($query);, и это дало мне bool(fales).

не очень помогает, так как это означает то же, что и первая ошибка!

так может кто-то, пожалуйста, помогите мне с этой проблемой?

любой совет и помощь будут оценены.

EDIT:

Я изменил код так:

<?php 
error_reporting(-1); 
ini_set('display_errors', 'On'); 
include "config/connect.php"; 
$searchList = ""; 
$clause = " WHERE ";//Initial clause 
$sql="SELECT * 
FROM `yt` 
INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id";//Query stub 
if(isset($_POST['submit'])){ 
    if(isset($_POST['keyword'])){ 
     foreach($_POST['keyword'] as $c){ 
      if(!empty($c)){ 
       $sql .= $clause."`".$c."` LIKE '%{$c}%'"; 
       $clause = " OR ";//Change to OR after 1st WHERE 
      } $query = mysqli_query($db_conx, $sql); 
     } 
    } 
//echo $sql;//Remove after testing 
} 
//var_dump($query); 

$productCount = mysqli_num_rows($query); 
$i=0; // count the output amount 
if ($productCount > 0) { 
    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
      $id = $row["id"]; 
      $product_name = $row["product_name"]; 
      $searchList .= ''.$product_name.''; 
    } 
} 
?> 
<?php echo $searchList; ?> 

но приведенный выше код дает мне следующие ошибки:

Notice: Undefined variable: query in on line 23 
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given on line 23 

я в правильном направлении?

EDIT:

Этот код возвращает данные из баз данных, но информация НЕПРАВИЛЬНО!

$clause = " WHERE ";//Initial clause 
$sql="SELECT * 
FROM `yt` 
INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id";//Query stub 
if(isset($_POST['submit'])){ 
    if(isset($_POST['keyword'])){ 
     foreach($_POST['keyword'] as $c){ 
      if(!empty($c)){ 
       $sql .= $clause."`sizes` LIKE '%{$c}%'"; 
       $clause = " OR ";//Change to OR after 1st WHERE 
      } 
     } 
     // Run query outside of foreach loop so it only runs one time. 
     $query = mysqli_query($db_conx, $sql); 
     // Check that the query ran fine. 
     if (!$query) { 
      print "ERROR: " . mysqli_error($db_conx); 
     } else { 
      // Use $query inside this section to make sure $query exists. 
      $productCount = mysqli_num_rows($query); 
      $i=0; // count the output amount 
      if ($productCount > 0) { 
       while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
        $id = $row["id"]; 
        $product_name = $row["product_name"]; 
        $searchList .= ''.$product_name.''; 
       } 
      } 
     } 
    } 
} 
+0

Добавьте проверку ошибок к самому запросу, и вы увидите, что есть проблемы с синтаксисом, которые необходимо устранить. –

+0

@ Fred-ii-, опечатка. – TERO

+0

Сделайте дамп в POST ['keyword']. Также ваш mysqli-запрос будет запускать все инструкции, но то, что вы передаете mysqli_num_rows, будет просто результатом последней итерации. Скобки в WHERE не нужны. – Mihai

ответ

1

Попробуйте изменить его на это и посмотреть, что вы получите:

<?php 
error_reporting(-1); 
ini_set('display_errors', 'On'); 
include "config/connect.php"; 
$searchList = ""; 
$clause = " WHERE ";//Initial clause 
$sql="SELECT * 
FROM `yt` 
INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id";//Query stub 
if(isset($_POST['submit'])){ 
    if(isset($_POST['keyword'])){ 
     foreach($_POST['keyword'] as $c){ 
      if(!empty($c)){ 
       ##NOPE##$sql .= $clause."`".$c."` LIKE '%{$c}%'"; 
       $sql .= $clause . " (ATTRIBUTES.sizes LIKE '%$c%' OR ATTRIBUTES.colors LIKE '%$c%')"; 
       $clause = " OR ";//Change to OR after 1st WHERE 
      } 
     } 
     print "SQL Query: $sql<br />"; //<-- Debug SQl syntax. 
     // Run query outside of foreach loop so it only runs one time. 
     $query = mysqli_query($db_conx, $sql); 
     var_dump($query); //<-- Debug query results. 
     // Check that the query ran fine. 
     if (!$query) { 
      print "ERROR: " . mysqli_error($db_conx); 
     } else { 
      // Use $query inside this section to make sure $query exists. 
      $productCount = mysqli_num_rows($query); 
      $i=0; // count the output amount 
      if ($productCount > 0) { 
       while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
        $id = $row["id"]; 
        $product_name = $row["product_name"]; 
        $searchList .= ''.$product_name.''; 
       } 
      } 
     } 
    } 
} 
?> 
<?php echo $searchList; ?> 

Edited: Фиксированные неправильные имена столбцов. Что-то вроде этого, может быть?

+0

ОШИБКА: Неизвестная колонка 'small' in 'where clause' – TERO

+0

Я просто сейчас глуп. Я искал имя столбца! – TERO

+0

Хе-хе, да, похоже. –

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