You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '3,4) AND`orient` LIKE '%' AND `price` >= 0 AND `price` <= 1.0E+20' at line 1
SELECT `ad_index`, `ad_date`, `ad_title`, `ad_html`, `district`, `orient`, `phones`, `total_space`, `floors_num`, `state`, `material`, `house_type`, CAST(`price` AS SIGNED) as `price`, `room_count`, `living_space`, `kitchen_space`, `planning`, `floor`, `toilet`, `balcony`, `loggia` FROM zhilcom_class_advert_flat_sale WHERE`district` IN (1,2,3,4,5,6,7,8,9,10,11) AND `room_count` IN (1,,3,4) AND`orient` LIKE '%' AND `price` >= 0 AND `price` <= 1.0E+20
вроде бы верно все, если указаны все значния IN (1,2,3,4) - тогда работает
Спустя 11 минут, 21 секунда (4.08.2010 - 22:35) linker написал(а):
`room_count` IN (1,,3,4)А чего такой красивый IN 1,,3?
Спустя 1 час, 6 минут, 54 секунды (4.08.2010 - 23:42) umnik90 написал(а):
linker
я отправляю выбранные в мультиселекте, в массиве.
я отправляю выбранные в мультиселекте, в массиве.
if (isset($district) && isset($room_count))
{
$d=implode(",",$district);
$r=implode(",",$room_count);
$sql .= "`district` IN (".$d.") AND `room_count` IN (".$r.") AND";
}
Спустя 7 часов, 17 минут, 42 секунды (5.08.2010 - 06:59) Michael написал(а):
$r=implode(",",array_filter($room_count, 'emptyfilter'));
function emptyfilter($val){
return (bool) $val;
}
тоже самое для $d.
Спустя 3 часа, 30 минут, 59 секунд (5.08.2010 - 10:30) linker написал(а):
Да, да, где-то в массиве есть элемент с пустым значением, фильтровать или искать ошибку выше по коду.
Спустя 3 часа, 53 минуты, 3 секунды (5.08.2010 - 14:23) umnik90 написал(а):
Michael
спасибо, работает.
а что мы сделали?
спасибо, работает.
а что мы сделали?
Спустя 11 минут, 12 секунд (5.08.2010 - 14:35) linker написал(а):
Отфильтровали массив от элементов с пустыми значениями, а потом слили полученный массив в строку вида: '1,2,3,4,5'
Но, если по-уму делать, то смотрите в то место, где у вас создается этот массив, т.е. уже на этой стадии там нужно отбрасывать пустые значения. Но это по-уму, если по-лени, то можно забить.
Но, если по-уму делать, то смотрите в то место, где у вас создается этот массив, т.е. уже на этой стадии там нужно отбрасывать пустые значения. Но это по-уму, если по-лени, то можно забить.
Спустя 19 минут, 52 секунды (5.08.2010 - 14:55) umnik90 написал(а):
linker
понял, спасибо.
хочется по уму)
я так понимаю сейчас у меня возникает трудность именно поэтому.
если не выбрано не одно значение, то в массив почему-то что-то поступает.
с обычным мультиселектом (а это jquery) было иначе: я проверял на существование массив (isset) и если не существовал убирал строку
понял, спасибо.
хочется по уму)
я так понимаю сейчас у меня возникает трудность именно поэтому.
если не выбрано не одно значение, то в массив почему-то что-то поступает.
с обычным мультиселектом (а это jquery) было иначе: я проверял на существование массив (isset) и если не существовал убирал строку
$sql .= "`district` IN (".$d.") AND `room_count` IN (".$r.") AND";из запроса... сейчас массив все время существует и даже не пустой (проверка на empty) не помогает
Спустя 11 минут, 5 секунд (5.08.2010 - 15:06) Michael написал(а):
Цитата |
сейчас массив все время существует и даже не пустой (проверка на empty) не помогает |
код показывай. Что приходит и как из этого формируются $room_count и т.д.
Спустя 7 минут, 8 секунд (5.08.2010 - 15:13) umnik90 написал(а):
Michael
у нас есть два мультиселекта:
после отправки формы получаем их:
и в зависимости от того, что пустое, а что нет делаем проверку и добавляем в запрос ту или иную часть
у нас есть два мультиселекта:
<div class="select_wrap" multiple="multiple">
<select name="room_count[]" class="select_field" multiple="multiple">
<option value="0">Комнаты </option>
<option value="1">1-комнат</option>
<option value="2">2-комнат</option>
<option value="3">3-комнат</option>
<option value="4">4-комнат и более </option>
</select> </div> </td>
<td width="147" rowspan="3" valign="top">
<div class="select_wrap" multiple="multiple">
<select name="district[]" multiple="multiple">
<option value="0">Районы</option>
<option value="1">Ворошиловский</option>
<option value="2">Калининский</option>
<option value="3">Киевский</option>
<option value="4">Ленинский</option>
<option value="5">Куйбышевский</option>
<option value="6">Кировский</option>
<option value="7">Будёновский</option>
<option value="8">Пролетарский</option>
<option value="9">Петровский</option>
<option value="10">Межгород</option>
<option value="11">Макеевка</option>
</select> </div>
после отправки формы получаем их:
$district = $_POST['district'];
$room_count = $_POST['room_count'];
и в зависимости от того, что пустое, а что нет делаем проверку и добавляем в запрос ту или иную часть
if (!empty($district) && !empty($room_count) )
{
$d=implode(",",array_filter($district, 'emptyfilter'));
$r=implode(",",array_filter($room_count, 'emptyfilter'));
$sql .= "`district` IN (".$d.") AND `room_count` IN (".$r.") AND";
}
else if (empty($district) && !empty($room_count) )
{
$r=implode(",",array_filter($room_count, 'emptyfilter'));
$sql .= "`room_count` IN (".$r.") AND";
}
else if (!empty($district) && empty($room_count) )
{
$d=implode(",",array_filter($district, 'emptyfilter'));
$sql .= "`district` IN (".$r.") AND";
}
else if (empty($district) && empty($room_count) )
{
$sql .= " ";
}
Спустя 28 минут, 9 секунд (5.08.2010 - 15:41) Michael написал(а):
А ну ка так:
для $district также.
$room_count = (isset($_POST['room_count'])) ? $_POST['room_count'] : null;
для $district также.
Спустя 6 минут, 14 секунд (5.08.2010 - 15:47) linker написал(а):
Смотри в сторону count($array). Пример
if (count($array) == 0) $sql .= ' ';Но ни empty, ни count не скажут тебе ничего про пустые элементы.
Спустя 10 минут, 54 секунды (5.08.2010 - 15:58) umnik90 написал(а):
linker
Michael
count натолкнул в нужную сторону, даже если ничего не выбрано форма отправляет массив из всех элементов, сейчас попробую проверить на пустоту каждый элемент
Michael
count натолкнул в нужную сторону, даже если ничего не выбрано форма отправляет массив из всех элементов, сейчас попробую проверить на пустоту каждый элемент
Спустя 19 минут, 26 секунд (5.08.2010 - 16:17) umnik90 написал(а):
if ( $district[0] != NULL && $district[1] != NULL && $district[2] != NULL && $district[3] != NULL && $district[4] != NULL && $district[5] != NULL && $district[6] != NULL && $district[7] != NULL && $district[8] != NULL && $district[9] != NULL && $district[10] != NULL && $room_count[0] != NULL && $room_count[1] != NULL && $room_count[2] != NULL && $room_count[3] != NULL )
не пошло
и empty тоже не пошло(
Спустя 8 минут, 25 секунд (5.08.2010 - 16:26) umnik90 написал(а):
получилось так
но вариант, я так понимаю не лучший.
if ( $district[0] != 1 && $district[1] != 2 && $district[2] != 3 && $district[3] != 4 && $district[4] != 5 && $district[5] != 6 && $district[6] != 7 && $district[7] != 8 && $district[8] != 9 && $district[9] != 10 && $district[10] != 11 && $room_count[0] != 1 && $room_count[1] != 2 && $room_count[2] != 3 && $room_count[3] != 4 )
{
}
else if ($room_count[0] != 1 && $room_count[1] != 2 && $room_count[2] != 3 && $room_count[3] != 4 )
{
$d=implode(",",array_filter($district, 'emptyfilter'));
$sql .= "`district` IN (".$d.")";
}
else if ($district[0] != 1 && $district[1] != 2 && $district[2] != 3 && $district[3] != 4 && $district[4] != 5 && $district[5] != 6 && $district[6] != 7 && $district[7] != 8 && $district[8] != 9 && $district[9] != 10 && $district[10] != 11)
{
$r=implode(",",array_filter($room_count, 'emptyfilter'));
$sql .= "`room_count` IN (".$d.")";
}
else
{
$d=implode(",",array_filter($district, 'emptyfilter'));
$r=implode(",",array_filter($room_count, 'emptyfilter'));
$sql .= "`district` IN (".$d.") AND `room_count` IN (".$r.") AND";
}
но вариант, я так понимаю не лучший.
Спустя 4 минуты, 34 секунды (5.08.2010 - 16:30) Michael написал(а):
Напиши уже нам что приходит:
если ничего не выбрать.
Я у себя проверяю - ничего не приходит.
echo '<hr><pre>' . print_r($room_count, true) . print_r($district, true) .'</pre><hr>';
если ничего не выбрать.
Я у себя проверяю - ничего не приходит.
Спустя 1 час, 31 минута, 28 секунд (5.08.2010 - 18:02) umnik90 написал(а):
Спустя 5 минут, 27 секунд (5.08.2010 - 18:07) umnik90 написал(а):
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
)
(
[0] =>
[1] =>
[2] =>
[3] =>
)
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
)
Спустя 14 часов, 1 минута, 28 секунд (6.08.2010 - 08:09) Michael написал(а):
$room_count = (isset($_POST['room_count'])) ? $_POST['room_count'] : null;
$room_count = array_filter($room_count, 'emptyfilter');
...
if (!empty($district) && !empty($room_count) )
...