2013-04-14 4 views
0

Я пытаюсь проверить, есть ли POST или GET мои переменные поиска, а затем добавить переменные в мой запрос. Затем я хочу передать имя массива этих переменных в URL-адрес для разбивки на мои результаты поиска. С чьей-то помощью, это то, как далеко я ушел.Поиск по критериям, не возвращающим никаких записей

$criteria = array('ctitle', 'csubject', 'creference', 'cat_id', 'cmaterial', 'ctechnic', 'cartist', 'csource', 'stolen'); 
$likes = ""; 
$url_criteria = ''; 
foreach ($criteria AS $criterion) { 
if (! empty($_POST[$criterion])) { 
$value = ($_POST[$criterion]); 
$likes .= " AND `$criterion` = '%$value%'"; 
$url_criteria .= '&'.$criterion.'='.htmlentities($_POST[$criterion]); 
} elseif (! empty($_GET[$criterion])) { 
$value = mysql_real_escape_string($_GET[$criterion]); 
$likes .= " AND `$criterion` = '%$value%'"; 
$url_criteria .= '&'.$criterion.'='.htmlentities($_GET[$criterion]); 
} 
} 
$sql = "SELECT * FROM collections WHERE c_id>0" . $likes . " ORDER BY c_id ASC"; 
echo $sql; 

У меня проблема в том, что после изменения запроса у меня было раньше, какие-то критерии, которые я использую для поиска не возвращает никаких записей даже при наличии этих записей. Я также повторил запрос и напечатал следующую строку:

SELECT * FROM collections WHERE c_id>0 AND `cmaterial` = '%wood%' ORDER BY c_id ASC 

Пожалуйста, что мне здесь не хватает?

ответ

0

Вы должны использовать ключевое слово LIKE вместо = при конкатенации частей критериев. Ваше условие означает поиск точного соответствия, включая% символов, тогда как LIKE означает поиск по шаблону.

$likes .= " AND `$criterion` LIKE '%$value%'"; 
+0

Thank you Zavg. Это решило запрос. Но я также беспокоюсь о моем разбиении на страницы. Я ищу по двум критериям (категория, см. Материал), но запрос печатает только эту строку: SELECT * FROM коллекции WHERE c_id> 0 И 'cat_id' LIKE '% 2. \'% 'ORDER BY c_id ASC Не удалось выполнить запрос и в URL-адрес: ... gallery.php? S = 8% 27. & cat_id = 2 & cmaterial = wood.% 27. Где может быть проблема? –

+0

Попробуйте отладить проверку кода, если конкатенация критериев выполняется два раза. Добавить var_dump ($ likes) в elseif блок после конкатенации – zavg

+0

Это то, что напечатано: string (0) "" string (0) "" string (0) "" string (24) "AND' cat_id' LIKE '% 2% '"string (57)" AND 'cat_id' LIKE'% 2% 'И' cmaterial' LIKE'% wood. \ '%' "string (57)" AND 'cat_id' LIKE '% 2%' AND' cmaterial' LIKE '% wood. \'% '"String (57)" AND 'cat_id' LIKE'% 2% 'И' cmaterial' LIKE'% wood. \ '%' "String (57)" AND 'cat_id' LIKE ' % 2% 'И 'cmaterial' LIKE'% wood. \ '%'" String (57) "AND' cat_id' LIKE '% 2%' И 'cmaterial' LIKE '% wood. \'% '" Не удалось выполнить запрос. Вы правы, запрос может повторяться, но как я могу это решить? –

Смежные вопросы