PHP, MySQL, массив из HTML-формы в поисковом запросе?

У меня есть поисковая система с html-формой, которая отправляет данные в PHP-скрипт и запрашивает базу данных MySQL. В форме html у меня есть опция, позволяющая выбрать несколько вариантов. До сих пор я помещал квадратные скобки после имени в HTML, чтобы сделать его массивом. Но я думаю, что проблема в PHP, потому что результаты неверны.

HTML

<select multiple="multiple" name='category[]'>
      <option>Literature</option>
      <option>History</option>
      <option>Science</option>
      <option>Fine Arts</option>
      <option>Trash</option>
      <option>Mythology</option>
      <option>Phylosophy</option>
      <option>Social Science</option>
      <option>Religion</option>
      <option>Geography</option>
  </select>

search.php

$button = $_GET ['submit'];
$search = $_GET ['search'];

}

if(strlen($search)<=1)
echo "Search term too short";
else{
echo "You searched for <b><em>$search</em></b> and ";
mysql_connect("fake","fake","fake");
mysql_select_db("quinterestdb");}

mysql_real_escape_string($search);

$search_exploded = explode (" ", $search);

foreach($search_exploded as $search_each)
{
$x++;
if($x==1)
$construct .="Answer LIKE '%$search_each%'";
else
$construct .="AND Answer LIKE '%$search_each%'";

}

$cat = $_GET ['category'];
$comma_separated = implode("','", $cat);

$constructs ="SELECT * FROM tossups WHERE $construct AND Category IN('$comma_separated')";
$run = mysql_query($constructs);

Когда я использую поисковую систему, скрипт работает нормально, но все еще есть результаты с невыбранными категориями. Есть идеи?


person user2483916    schedule 17.06.2013    source источник
comment
Что такое метод формы? Вы используете POST или GET?   -  person Khawer Zeshan    schedule 17.06.2013
comment
вы можете распечатать $constructs и запустить в phpmyadmin.   -  person Rajeev Ranjan    schedule 17.06.2013
comment
ПОЛУЧИТЬ по умолчанию. Вам не нужно указывать.   -  person webrama.pl    schedule 17.06.2013
comment
Что находится в переменной $construct?   -  person Chris    schedule 17.06.2013
comment
Тег option должен иметь назначенный атрибут value, в implode двойные кавычки являются дополнительными, ваш скрипт уязвим для внедрения sql, вы используете устаревший mysql API.   -  person Leri    schedule 17.06.2013
comment
Я отредактировал его, чтобы показать, что находится в $construct   -  person user2483916    schedule 17.06.2013
comment
@PLB Но это не значения, это строки? В базе данных они хранятся в виде строк (varchar)   -  person user2483916    schedule 17.06.2013
comment
@ Раджив Ранджан Я сделал.   -  person user2483916    schedule 17.06.2013
comment
@user2483916 user2483916 вы сделали в своем коде повторение его на своей стороне и сказали нам, что он содержит, и еще одна вещь, если значения в параметрах, поступающих из базы данных, говорят $option1, поэтому вы должны закодировать его как ‹option value='.$option1.' ›.$опция1.‹/опция›   -  person Rajeev Ranjan    schedule 17.06.2013
comment
@RajeevRanjan Когда я печатаю $constructs, я получаю:   -  person user2483916    schedule 17.06.2013
comment
SELECT * FROM tossups WHERE Answer LIKE '%washington%' AND Category IN('Literature','History') ‹--- пример, который я сделал только что. Когда я запускаю это в phpMyAdmin, все результаты правильные и категории правильные, но на веб-странице я получаю результаты с другими категориями.   -  person user2483916    schedule 17.06.2013
comment
/search.php?search=washington&submit=Search&category%5B%5D=Literature&category%5B%5D=History ‹--- URL, так как GET извлекает из URL.   -  person user2483916    schedule 17.06.2013
comment
@user2483916 user2483916, если этот запрос используется для веб-страницы, то просто невозможен другой ответ для phpmyadmin и на веб-странице.   -  person Rajeev Ranjan    schedule 17.06.2013
comment
Попробуйте использовать метод POST в своей форме и надейтесь, что это исправит   -  person Lepanto    schedule 17.06.2013


Ответы (1)


Это не так. Должно быть что-то вроде этого, со VALUE

<select multiple="multiple" name='category[]'>
      <option value="v1">Literature</option>
      <option value="v2">History</option>
...
  </select>
person Hanky Panky    schedule 17.06.2013