2015-01-06 1 views
0

Существует DB, где я хранил информацию о продуктах. (id, name, price, category, unit)Поиск массива в базе данных mysql с помощью PHP

Во-первых, я перечислял продукты для выбора в файле php с именем 'input.php'. Отлично работает.

// SQL query 

    $query = "SELECT * 
       FROM  products 
       ORDER BY p_name 
       ASC"; 

      $result = mysql_query($query); 
      if($result === FALSE) {die(mysql_error());}?> 

       <table width="100%"> 
        <tr> 
         <td></td> 
         <td width="800px"><h1>Product name</h1></td> 
         <td width="400px"><h1>Product price</h1></td> 
         <td>Category</td> 
        </tr> 
       </table> 
      <? 
      while ($row = mysql_fetch_assoc($result)) {?> 
       <table> 
        <tr> 
         <td><input type="checkbox" name="pro_name[]" value="<?=$row['p_name']?>"></td> 
         <td width="800px" align="left"><b><?=$row['p_name']?></b></td> 
         <td width="400px" align="left"><?=$row['p_price']?></td> 
         <td align="center"><?=$row['p_cat']?></td> 
        </tr> 
       </table> 
       <?} 

Я отправляю данные в index.php и обрабатываю переменные там.

if($_SERVER['REQUEST_METHOD']== "POST"){ 

// Variables 

$c_name = $_POST['c_name'];    // ['company name'] 
$c_consumption = $_POST['c_consumption']; // ['company consumptions'] 
$f_price = $_POST['f_price'];    // ['fuel price'] 
$o_sales = $_POST['o_sales'];    // ['sales'] 
$pro_name = $_POST['pro_name'];   // ['products names'] 
$pro_id = $_POST['pro_id'];    // ['product id'] 
$pro_price = $_POST['pro_price'];   // ['product price'] 

Третий шаг, на котором я застрял ... Мне нужно перечислить выбранные детали продуктов.

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

Я попробовал его с IN, LIKE, implode .... и т. Д., Но это не сработало. :(

// SQL query 

     $query = "SELECT * 
         FROM  products 
         WHERE  p_name IN (".implode(',', $pro_name).") 
         ORDER BY p_name 
         ASC"; 

      $result = mysql_query($query); 
      if($result === FALSE) {die(mysql_error());} 

      while ($row = mysql_fetch_array($result)) {?> 
       <table> 
        <tr>        
         <td width="800px" align="left"><b><?=$row['p_name']?></b></td> 
         <td width="400px" align="left"><?=$row['p_price']?></td> 
         <td align="center"><?=$row['p_cat']?></td> 
        </tr> 
       </table> 
       <?} 
       } 

EDIT:

var_dump($pro_name); result 

array(3) { [0]=> string(14) "12 V szivattyú" [1]=> string(17) "120 l/p szivattyú" [2]=> string(28) "24 hónapra bővített garancia" } 
+0

Какие сообщения об ошибках или выходные данные вы получаете? – ply

+1

, если '' в' p_name' также VARCHAR Тогда оператор Должен иметь ' '' 'IN (' p_name_1 '' p_name_2«) ' –

+0

У вас ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи V насоса 120 л/мин Насос продлен срок 24 месяцев) «в строке 3 –

ответ

0

Что такое значение $ pro_name Если вы используете лопаются, то должен быть массив как $ pro_name = массив ('Fruit', 'Шоколад', «Зеркало»); Тогда запрос будет:

SELECT * 
         FROM  products 
        -> WHERE  p_name IN ("Fruit,Chocolate,Mirror") 
         ORDER BY p_name 
         ASC 

Но проблема заключается в том, что запрос все еще не так, из-за», то и следует удалить и изменить к

WHERE  p_name IN (implode(',', $pro_name)) 

Тогда запрос будет как

SELECT * 
          FROM  products 
         -> WHERE  p_name IN (Fruit,Chocolate,Mirror) 
          ORDER BY p_name 
          ASC 
+0

var_dump ($ pro_name); массив (3) {[0] => строка (14) "12 В насосе«[1] => строка (17)" 120 л/мин Насос "[2] => строка (28)" 24 месячная гарантия расширенная "} –

0

Если p_name тип строки, я уверен, что $ pro_names, что вы разрушаете необходимость быть разграничены с '(одиночной кавычки разделителем) , Похоже, что ваш скрипт интерпретируется парсером sql как имена столбцов.

+0

Спасибо за ваш ответ! var_dump (implode ("'," ", $ pro_name)); результат: строка (65) «Насос 12„“120 л/мин Насос», „длительный период 24 месяцев,“ У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи V насос 120 л/мин Насос продлен срок 24 месяцев) ORDER BY \t р_ «в строке 3 –

0

Попробуйте этот SQL

$pr_name = ltrim(implode(',' , '".$pro_name."'), ','); 
$query = "SELECT * 
      FROM products 
      WHERE p_name IN ($pr_name) 
      ORDER BY p_name 
      ASC"; 
+0

Спасибо Ф.О. вашего ответа. Я пробовал: Предупреждение: лопается() [function.implode]: Invalid аргументов, передаваемые в C: \ AppServ \ WWW \ проекты \ аппаратных 49 У вас ошибка в \ index.php в строке синтаксиса SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ним) ORDER BY p_name ASC 'в строке 3 –

0

Спасибо за ответы. Помогите мне решить эту проблему.

Вот мое решение:

<input type="checkbox" name="pro_id[]" value="<?=$row['p_id']?>"> 

создает массив:

string(24) "6, 7, 10, 20, 21, 49, 54" 

Than

$list = implode(', ', $pro_id); 

SQL

// SQL query 
$query = " SELECT  * 
      FROM  products 
      WHERE  p_id IN ($list) 
      ORDER BY p_name 
      ASC "; 

Я думаю, что имена содержат символы, которые запрос не может обработать, поэтому теперь запрос основан на ID. Я не знаю, почему я не работаю с id в начале ... мой плохой.

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