Jump to content
  • 0

Запрос к БД


lapwing
 Share

Question

Подскажите пожалуйста, как решить проблему: имеется форма поиска с полями col_kom, raion, cost. Имеется запрос к БД

$result = mysql_query("SELECT * FROM sale_kv WHERE s_kv1 = '$col_kom'  AND  s_kv2 = '$raion'  AND s_kv11 <= '$cost' ORDER BY id DESC");

В этом случае выборка производится по всем трем значениям. Как переделать запрос под тот случай, если пользователь заполнил только два поля или одно. К примеру количество комнат (col_kom) его не интересует и район (raion) тоже, лишь бы цена (cost) была меньше им заданной?

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Можно примерно так:

$result = "SELECT * FROM sale_kv WHERE";

if($col_kom!=""){
$result .="s_kv1 = {$col_kom}";
$a=1;
}else{$a=0;}

if($raion!="" && $a==1;){
$result .="AND s_kv2 = {$raion}";
$b=2;
}else if($raion!="" && $a==0;){
$result .="s_kv2 = {$raion}";
$b=1;
}

if($cost!="" && $b==2 || $cost!="" && $b==1 ){
$result .="AND s_kv11 <= {$cost}";
}else if($col_kom=="" && $raion==""){
$result .="s_kv11 <= {$cost}";
}
$result .="ORDER BY id DESC";
$result = mysql_query($result);

Можно еще на существование переменных проверять...

Link to comment
Share on other sites

  • 0

Спасибо за ответ. Теперь, правда, возникла другая проблема. Вот последующий код:

.......
1. $result = mysql_query($result,$db);

2. $myrow = mysql_fetch_array($result);

3. echo "<table class='long' cellspacing='2' cellpadding='0'>";

do{
echo "<tr class='table_sale'>".
"<td>"."<a href='view_rezult.php?b=sale_kv&id=".$myrow['id']."'>".$myrow['s_kv1']."</a>"."</td>".
"<td>".$myrow['s_kv2']."</td>".
"<td class='o'>".$myrow['s_kv3']."</td>".
"<td>".$myrow['s_kv7']."</td>".
"<td>".$myrow['s_kv8']."</td>".
"<td>".$myrow['s_kv9']."</td>".
"<td>".$myrow['s_kv10']."</td>".
"<td>".$myrow['s_kv12']."</td>".
"</tr>";
14. } while($myrow = mysql_fetch_array($result));
echo "</table>";

Т.е. я пытаюсь вывести результаты поиска. Пишет, что в строке 2 и 14 ошибка - mysql_fetch_array() expects parameter 1 to be resource, boolean given in. В чем ошибка? Подскажите пожалуйста.

Link to comment
Share on other sites

  • 0
Т.е. я пытаюсь вывести результаты поиска. Пишет, что в строке 2 и 14 ошибка - mysql_fetch_array() expects parameter 1 to be resource, boolean given in. В чем ошибка? Подскажите пожалуйста.

просто результат ничего не вернул) в случае 0 строк вместо пустого массива возвращается false - копай что с запросом или прогони его руками по базе

Link to comment
Share on other sites

  • 0

Копаю весь вечер - ничего не могу понять, если задаю жестко:

$result = "SELECT id,s_kv1,s_kv2,s_kv3,s_kv7,s_kv8,s_kv9,s_kv10,s_kv12 FROM sale_kv WHERE s_kv1='$col_kom'";

все получается, если вставляю этот кусочек кода - выдает ошибку

$result = "SELECT id,s_kv1,s_kv2,s_kv3,s_kv7,s_kv8,s_kv9,s_kv10,s_kv12 FROM sale_kv WHERE";
................
if($col_kom!=""){
$result .="s_kv1 = {$col_kom}";
$a=1;
}else{$a=0;}
...............
$result = mysql_query($result,$db);
$myrow = mysql_fetch_array($result);

Смысл кода вроде ясен - если переменная $col_kom не равно пустому значению, конкатенируем к $rezult условие s_kv1={$col_kom}

Может, где-то в синтаксисе ошибка? Посмотрите пожалуйста.

Link to comment
Share on other sites

  • 0

После этого слова WHERE"; или перед этим словом "s_kv1 = {$col_kom}"; нужен пробел иначе получается WHEREs_kv1 = {$col_kom}, ошибка может быть из-за этого , лучше всего смотреть какой запрос получается перед его выполнением, я это делаю через echo. То что выведется на экран копирую и вручную закидываю в базу, там сразу видно в чем ошибка. Например ты можешь посмотреть его echo $result;.

В сообщении

я закидывал примерный код, его все равно перерабатывать и переделывать, например, если ты ставишь условие
if($col_kom!=""){
$result .="s_kv1 = {$col_kom}";
$a=1;
}else{$a=0;}

и если выполняется условие else ТО зачем тебе переменная $a если дальше в коде она не используется тогда достаточно

if($col_kom!=""){	 $result .="s_kv1 = {$col_kom}";}

Опять же если ты не предусмотришь возможность поведения кода при пустой $col_kom, то тоже будет ошибка. Добавляй хотя бы единицу в конце запроса, например, else{$result.=" 1";}

Edited by 3ABAPKA
Link to comment
Share on other sites

  • 0

В общем и целом вроде бы разобрался. Код оставил практически без изменений, т.к. использую все три условия, а $a и $b нужны, я так понял, для определения добавлять или не добавлять следующее условие в зависимости заполнено поле или нет(т.е. пустая переменная или нет). Действительно нужен был пробел и еще фигурные скобки у переменных заменил на одинарные кавычки.

Спасибо.Спасибо за подробный и понятный ответ.

Еще хотел заодно спросить по поводу переменных: я проверяю их на существование, а затем обрабатываю - if (isset($_POST['col_kom'])){$col_kom = $_POST['col_kom'];} if (isset($col_kom)){$col_kom = htmlspecialchars(stripslashes($col_kom));} Вопросов собственно два: 1. нужно ли обрабатывать переменные, если пользователь не вводит значения с клавиатуры, а выбирает их из списка? и 2. дочитался тут до функции mysql_escape_string и думаю, может ее лучше использовать? что показывает опыт? в чем различие?

Link to comment
Share on other sites

  • 0
Вопросов собственно два: 1. нужно ли обрабатывать переменные, если пользователь не вводит значения с клавиатуры, а выбирает их из списка? и 2. дочитался тут до функции mysql_escape_string и думаю, может ее лучше использовать? что показывает опыт? в чем различие?

1. Да, нужно, вы же не хотите чтоб вас взломали?

2. И её тоже. различие смотрите в справочнике, там доступно описаны эти функции, для чего и что и как.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy