Ребят, есть форма вида:
<form action="index.php" method="post">
Производитель
<select style="width: 200px" name="brand">
<option value="">Всі</option>
<option value="Michelin">Michelin</option>
<option value="Nokian">Nokian</option>
</select><br />
Размер
<select style="width: 100px" name="size">
<option value="">Все</option>
<option value="150">150</option>
<option value="155">155</option>
</select>
<select style="width: 100px" name="size2">
<option value="">Все</option>
<option value="55">55</option>
<option value="66">60</option>
</select><br />
Радиус
<select style="width: 100px" name="radius">
<option value="">Все</option>
<option value="13">13</option>
<option value="17">17</option>
</select>
<br /><input type="submit" value="ok">
</form>
Далее не могу разобраться как правильно написать обработчик, если б нужно было обязательно выбрать все параметры из списков, труда не составило б
$result = mysql_query ("SELECT * FROM `products` WHERE `brand` = '$brand' AND `size` = $size' AND `size2` = '$size2' и т.д.
Но мне нужно, чтоб можно было выбрать из базы по-одному, или нескольким параметрам, например по производителю, или по размеру и радиусу.
ведь использовать типа:
if(!empty($brand)){
$result = mysql_query ("SELECT * FROM `products` WHERE `brand` = '$brand' ");
}elseif(!empty($size)){
и т.д.
}
Совсем не разумно. Помогите пожалуйста
Спустя 1 час, 17 минут, 8 секунд (24.11.2011 - 02:59) Bezdna написал(а):
Цитата (Gansik @ 24.11.2011 - 01:42) |
$result = mysql_query ("SELECT * FROM `products` WHERE `brand` = '$brand' AND `size` = $size' AND `size2` = '$size2' |
А чем эта выборка не устраивает?
Спустя 1 час, 52 минуты, 45 секунд (24.11.2011 - 04:52) hookman написал(а):
$where = array();
if(!empty($brand)) { $where[] = "`brand` = '" . mysql_real_escape_string($brand) . "'"; }
if(!empty($size)) { $where[] = "`size` = '" . mysql_real_escape_string($size) . "'"; }
if(!empty($size2)) { $where[] = "`size2` = '" . mysql_real_escape_string($size2) . "'"; }
$result = mysql_query("SELECT * FROM `products`" . (!empty($where) ? " WHERE " . implode(' AND ', $where) : ""));
Спустя 5 часов, 58 минут, 29 секунд (24.11.2011 - 10:50) Gansik написал(а):
hookmanда, спасибо вроде работает. Остался еще один вопрос. Как правильно еще добавить в запрос условие? вида:
WHERE `categoryID` = '187'
а то я тут чет запутался в синтаксисе.
Спустя 17 минут, 25 секунд (24.11.2011 - 11:08) Placido написал(а):
AND WHERE `categoryID` = '187'
Спустя 16 минут, 51 секунда (24.11.2011 - 11:25) hookman написал(а):
Цитата (Gansik @ 24.11.2011 - 07:50) |
hookman да, спасибо вроде работает. Остался еще один вопрос. Как правильно еще добавить в запрос условие? вида:
WHERE `categoryID` = '187' а то я тут чет запутался в синтаксисе. |
Вас запутал синтаксис
тернарного оператора, верно? Почитайте :)
Если условие должно присутствовать постоянно, то можно так:
$where = array("`categoryID` = '" . mysql_real_escape_string($categoryID) . "'");
if(!empty($brand)) { $where[] = "`brand` = '" . mysql_real_escape_string($brand) . "'"; }
if(!empty($size)) { $where[] = "`size` = '" . mysql_real_escape_string($size) . "'"; }
if(!empty($size2)) { $where[] = "`size2` = '" . mysql_real_escape_string($size2) . "'"; }
$result = mysql_result("SELECT * FROM `products`" . (!empty($where) ? " WHERE " . implode(' AND ', $where) : ""));
Если так же как и предыдущие то так:
$where = array();
if(!empty($brand)) { $where[] = "`brand` = '" . mysql_real_escape_string($brand) . "'"; }
if(!empty($size)) { $where[] = "`size` = '" . mysql_real_escape_string($size) . "'"; }
if(!empty($size2)) { $where[] = "`size2` = '" . mysql_real_escape_string($size2) . "'"; }
if(!empty($categoryID)) { $where[] = "`categoryID` = '" . mysql_real_escape_string($categoryID) . "'"; }
$result = mysql_result("SELECT * FROM `products`" . (!empty($where) ? " WHERE " . implode(' AND ', $where) : ""));
Спустя 16 минут, 13 секунд (24.11.2011 - 11:41) Gansik написал(а):
hookmanвот спасибо добрый человек.
Хороший форум, хорошие люди.
Все работает
Спустя 3 минуты, 59 секунд (24.11.2011 - 11:45) Игорь_Vasinsky написал(а):
Цитата |
"`size` = '" . mysql_real_escape_string($size) . "'" |
тут int???
достаточно
"`size` = " . (int)$size . "
Спустя 8 минут, 20 секунд (24.11.2011 - 11:53) Gansik написал(а):
Игорь_Vasinsky
да для меня это не особо важно, у меня там своя проверка идет, после получение переменных из формы