2012-05-07 8 views
1

быстрый, я создаю поисковый запрос, и я застрял в одной проблеме ... с помощью этого кода.Поисковый запрос с подтверждением

этот код работает отлично, но мне нужно добавить в него эту проверку, проблема возникает, когда я добавляю эту проверку userid='$id', поисковый запрос не работает с ней. Может ли кто-нибудь поставить меня на правильный путь? Мне что-то не хватает. Значение id равно true. Это вся часть кода для этого поискового запроса, результат без одобрения.

else if($_POST['filter1'] == "po_boravistu") 
     { 
      if($row_12['admin_id'] < 1) 
       { 
      //FILTER 10 po boravištu 
$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND WHERE bor_mjesto LIKE '%$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%'"; 
       } 
     } 

Весь скрипт работает нормально без userid='$id' в нем, но когда я добавить, что сценарий проверки падает замертво.

+0

Пожалуйста, введите код для запроса с добавленным ограничением ID. Кроме того, вы убедились, что $ id содержит значение, которое вы хотите его содержать? – octern

+0

Не могли бы вы показать нам запрос с подтверждением? –

+0

@BrianWarshaw У меня есть код редактирования с проверкой, значение $ id в порядке и результат в порядке без userid = '$ id'. Поэтому я делаю что-то неправильно. –

ответ

3

Ваш SQL недействителен, поскольку у вас есть 2 предложения WHERE.

Изменить это:

$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND (bor_mjesto LIKE %$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%')"; 

(обратите внимание на использование скобок, чтобы окружить мультипликатор «ИЛИ»)

+0

Да, скобки, вот и все. Спасибо чувак. –

2

Вы должны бросить второй WHERE (и добавить некоторые скобки), как это :

$sqlCommand = " 
SELECT * 
FROM 
albums 
WHERE 
userid='$id' 
AND 
(
bor_mjesto LIKE '%$searchquery%' OR 
bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR 
bor_ulica LIKE '%$searchquery%' OR 
bor_opcina LIKE '%$searchquery%' 
) 
"; 

Вы только должны использовать WHERE один раз в запросе. Кроме того, вам не нужно добавлять одиночные кавычки вокруг $ id здесь, так как это целочисленное значение.

Кроме того, я не уверен, откуда происходят ваши переменные, но вы, вероятно, захотите их избежать, используя mysql_real_escape_string, прежде чем помещать их в этот запрос. Наконец, SELECT * почти всегда является ошибкой: выберите только нужные вам строки. Это немного сэкономит вам время.

+0

+1 для упоминания ускользающих vars – TheOx

+0

@Daan Что делать, если у меня много запросов на одной странице? Есть ли простой способ сделать 'mysql_real_escape_string', не делая этого для каждого запроса для каждого значения? Может быть, я не понимаю 'mysql_real_escape_string'? –

+0

Если вы используете переменную более одного раза (например, '$ searchquery' в вашем примере), вам просто нужно ее избежать. Поместите это перед вашим запросом: '$ searchquery = mysql_real_escape_string ($ searchquery);'. Впоследствии строка '$ searchquery' будет безопасной для использования в MySQL-запросах. Это помогает предотвратить проблемы, если у вас есть одинарные кавычки в '$ searchquery': без их экранирования одинарные кавычки будут интерпретироваться как окончание строки и, следовательно, привести к синтаксической ошибке MySQL. Эвакуация пользовательского ввода должным образом также защищает вас от [SQL injection] (http://stackoverflow.com/a/601524/1185355). – Daan