Привет. Делаю гибкий поиск по сайту. Код не работает, в чем косяк не пойму, уже часа 3 голову ломаю. Сам код. <table border="1" align="center" cellpadding="15" cellspacing="0"> <tr> <td bgcolor="#b6b6b6" align="center">№ Записи</td> <td bgcolor="#b6b6b6" align="center">Тема</td> <td bgcolor="#b6b6b6" align="center">Текст</td> <td bgcolor="#b6b6b6" align="center">Дата</td> <td bgcolor="#b6b6b6" align="center">Удаление записи</td> <td bgcolor="#b6b6b6" align="center">Редактирование</td> </tr> <?php require_once('connect.php'); $search_query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, tema, text, id FROM blog"; $where_list = array(); $user_search = $_GET['usersearch']; $search_words = explode(' ', $user_search); foreach($search_words as $word) { $where_list[] = " description LIKE '%$word%' OR "; } $where_claus = implode(' OR ', $where_list); if(!empty($where_claus)) { $search_query = " WHERE $where_claus"; } $result = mysql_query($search_query); while ($row = mysql_fetch_array($result)) { echo '<tr>'; echo '<td>' . $row['id'] . '</td>'; echo '<td>' . $row['tema'] . '</td>'; echo '<td>' . $row['text'] . '</td>'; echo '<td>' . $row['date'] . '</td>'; echo '<td>' . 'Удалить' . '</td>'; echo '<td>' . 'Редактировать' . '</td>'; echo '</tr>'; } echo '</table>'; Ошибку выдает такую: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\blog\admin\connect\search.php on line 33 Добавлено спустя 5 минут 2 секунды: Только не $where_list[] = " description LIKE '%$word%' OR "; а, $where_list[] = " text LIKE '%$word%' OR ";
Замени на Код (Text): $where_list[] = " text LIKE '%$word%' "; OR у тебя появится в implode. А в этой строке он лишний.
Так имплудом я как раз убираю последний - лишний "OR" в запросе. Добавлено спустя 1 минуту 56 секунд: аа, ссори... Спс))) Добавлено спустя 1 минуту 5 секунд: Ток, все ровно ошибка.
Нет. implode склеивает массив, ставя указанную строку между элементами. Код (PHP): <?php $arr = array('first', 'second', 'third'); $str = implode(' OR ', $arr); echo($str); // first OR second OR third ?> Добавлено спустя 2 минуты 57 секунд: замени на Код (PHP): $search_query .= " WHERE $where_claus";
Ещё почитай тут: http://www.phpfaq.ru/slashes А то через этот поисковый запрос взломают сайт тебе. Нужно экранировать данные.
Да, спс, я знаю, еще только начал делать функцию. Добавлено спустя 10 минут 55 секунд: А что еще может быть, ищет только латиницу, если набирать в поиске кириллицей, аналогичная ошибка. В БД и коде стоит utf-8, везде.
замени на Код (PHP): $result = mysql_query($search_query) or exit($search_query . '<br />' . mysql_error()); И посмотри текст получившегося запроса и на что ругается MySQL. Попробуй скопировать запрос и выполнить его в phpMyAdmin и т.п.
В phpMyAdmin все ок SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, tema, text, id FROM blog WHERE text LIKE '%��%' Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like' а где не так кодировка стоит? Добавлено спустя 10 минут 29 секунд: в одном из /php файлов была анси
Пытаюсь доделать код. Отдельно все идет норм, но когда объедению функции поиска, сортировки и постраничный вывод, выдает ошибку. Сам код: Код (Text): /* Функция гибкого поиска */ function build_query($user_search, $sort){ $search_query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, tema, text, id FROM blog"; $where_list = array(); $clean_search = str_replace(',',' ', $user_search); $search_words = explode(' ', $clean_search); $final_search_words = array(); if(count($search_words) > 0){ foreach($search_words as $word){ if(!empty($word)){ $final_search_words[] = $word; } } } if(count($final_search_words)){ foreach($final_search_words as $word){ $where_list[] = " text LIKE '%$word%'"; } } $where_claus = implode(' OR ', $where_list); if(!empty($where_claus)) { $search_query .= " WHERE $where_claus"; } switch ($sort) { case 1: $search_query .= " ORDER BY title"; break; case 2: $search_query .= " ORDER BY title DESC"; break; default: } return $search_query; } /* Функция гибкого поиска */ /* Функция сортировки*/ function generate_sort_links($user_search, $sort) { $sort_links = ''; switch ($sort) { case 1: $sort_links .= '<a href = "' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=1"> Сортировка 1</a>'; break; case 2: $sort_links .= '<a href = "' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=1"> Сортировка 2</a>'; break; default: $sort_links .= '<a href = "' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=1"> Сортировка 3</a>'; } return $sort_links; } /* Функция сортировки*/ /* Навигационные гиперссылки*/ function generate_page_links($user_search, $sort, $cur_page, $num_pages) { $page_links = ''; if ($cur_page > 1) { $page_links .= '<a href="' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=' . $sort . '&page=' . ($cur_page - 1) . '"><-</a> '; } else { $page_links .= '<- '; } for ($i = 1; $i <= $num_pages; $i++) { if ($cur_page == $i) { $page_links .= ' ' . $i; } else { $page_links .= ' <a href="' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=' . $sort . '&page=' . $i . '"> ' . $i . '</a>'; } } if ($cur_page < $num_pages) { $page_links .= ' <a href="' . $_SERVER['PHP_SELF'] . '?usersearch=' . $user_search . '&sort=' . $sort . '&page=' . ($cur_page + 1) . '">-></a>'; } else { $page_links .= ' ->'; } return $page_links; } /* Навигационные гиперссылки*/ // Далее отоброжение поиска вместе со всеми функциями $user_search = $_GET['usersearch']; $user_search = $_GET['sort']; $cur_page = isset($_GET['page']) ? $_GET['page'] : 1; echo generate_sort_links($user_search, $sort); require_once('connect.php'); $query = build_query($user_search, $sort); $result = mysqli_query($query); $total = mysqli_num_rows($result); $num_pages = ceil($total / $results_per_page); $query = $query . " LIMIT $skip, $results_per_page"; $result = mysqli_query($query); while ($row = mysql_fetch_array($result)) { echo '<tr>'; echo '<td>' . $row['id'] . '</td>'; echo '<td>' . $row['tema'] . '</td>'; echo '<td>' . $row['text'] . '</td>'; echo '<td>' . $row['date'] . '</td>'; echo '<td>' . 'Удалить' . '</td>'; echo '<td>' . 'Редактировать' . '</td>'; echo '</tr>'; } echo '</table>'; if ($num_pages > 1) { echo generate_page_links($user_search, $sort, $cur_page, $num_pages); } Добавлено спустя 2 минуты 3 секунды: Как я понимаю ошибка в том что многим функциям изначально нету гет запроса, но тогда как решить эту задачу?
Проблема решена. Если кому интересно могу скинуть полный код поиска с постраничным выводом и функцией сортировки.