Ильюха
Новичок
Дата регистрации:
21.11.2013 22:53:48
Сообщений: 18
Здравствуйте!
Создал сайт-копию при просмотре бесплатного курса по РНР. Следующий урок: "Создание поиска по сайту".
http://blog.myrusakov.ru/site-search.html
Идентично слизал один в один. Пять раз проверял. Таблицу в БД проверял. Кодировки проверял. Гуглил - не помогло..
----------------
Вылезают ошибки:
Warning: explode() [function.explode]: Empty delimiter in S:\home\mysite.local\www\Lib\functions.php on line 96
Warning: Invalid argument supplied for foreach() in S:\home\mysite.local\www\Lib\functions.php on line 98
Fatal error: Call to a member function fetch_assoc() on a non-object in S:\home\mysite.local\www\Lib\functions.php on line 36
--------------
function resultSetToArray($result_set) {
$array = array();
(36) while (($row = $result_set->fetch_assoc()) != false)
$array[] = $row;
return $array; }
function searchArticles($words) {
$query_search = "";
(96) $arraywords = explode("", $words);
print_r($arraywords);
(98) foreach ($arraywords as $key => $value) {
if (isset($arraywords[$key - 1])) $query_search .= " OR ";
$query_search .= "(`full_text` LIKE '%$value%' OR `title` LIKE '%$value%')";
}
global $mysqli;
connectDB();
(104) $result_set = $mysqli->query("SELECT * FROM `articles` WHERE $query_search"
closeDB();
return resultSetToArray($result_set);
}
-------------------
<?php
if (($_GET["button_search"]) && (!empty($_GET["words"]))) {
$words = htmlspecialchars($_GET["words"]);
$results = searchArticles($words);
if (count($results) != 0) {
for ($i = 0; $i < count($results); $i++) {
$number = $i + 1;
$link = "article.php?id=".$results[$i]["id"];
$title = $results[$i]["title"];
include "search_item.php";
}
}
else echo "Ничего не найдено";
}
else echo "Не задан поисковый запрос!";
?>
--------------
Пробовал отключать часть кода, искать ошибку..
Так вот если убрать «WHERE $query_search» в строке 104, то появятся все четыре статьи из БД (не взирая на запрос в "поиске"
и пропадёт ошибка в 36 строке. Но ошибки в 96 и 98 остаются.
Помогите пожалуйста.
С уважением, Илья
tikkiwiki
Модератор
Дата регистрации:
15.11.2013 15:36:59
Сообщений: 194
Здравствуйте Илья. На Ваш вопрос я ответил в службе поддержки. Убедительная просьба, не создавать копии Ваших тем, на форуме, если параллельно был дан запрос в службу поддержки. Спасибо за понимание.
Копия ответа на Ваш запрос:
Здравствуйте, Илья.
1.Warning: explode() [function.explode]: Empty delimiter
Данная ошибка возникает в связи с тем, что, одна из переменных в этой функции принимает пустое значение. Проверьте все переменные на эту ошибку. Выведите каждую переменную и увидите не вооруженным глазом решение Вашей проблемы.
2. Warning: Invalid argument supplied for foreach()
Ошибка гласит, что какая-то из переменных не содержит массив, а foreach() ожидает именно его. Опять же разберитесь. Скорее всего после решения первой ошибки, эта ошибка тоже отпадет.
3.Fatal error: Call to a member function fetch_assoc() on a non-object
Это значит $result_set пустой и не является объектом.Эта ошибка возникает когда в запросе ошибка
Так же:
closeDB();
return resultSetToArray($result_set);
}
Не совсем понятно. Извлекаем огурцы из закрытой банки? Проверьте.
Так же, допишите после запроса
echo $_DB->error . '<br />'; И посмотрите, что он хочет.
Проверьте синтаксис внимательнее. Где-то ошибка. В БД проверьте типы полей в таблице, может там ошибка, не тот тип.
Попробуйте заменить Ваш while:
while (($row = $result_set->fetch_assoc()) != false)
$array[] = $row;
На этот:
while ($row = $result_set->fetch_assoc())
$array[] = $row;
С Уважением, Александр Пархоменко.
Служба поддержки Михаила Русакова.
Ильюха
Новичок
Дата регистрации:
21.11.2013 22:53:48
Сообщений: 18
Здравствуйте, Александр!
Спасибо за Ваш ответ - буду разбираться.
О наболевшем..
1. На e-mail я получил только одно предупреждение: ответ на форуме. Как получить ответ в службе поддержки - не-зна-ю.
2. Про "огурцы в закрытой банке" смотрите в уроке Михаила: http://blog.myrusakov.ru/site-search.html
Всё списывал один в один.
3. Замена while не дало положительного результата. Тем более, что на функцию resultSetToArray подвязано три других - и все работают.
В том числе подвязанные на ту же самую таблицу из базы данных.
4.
closeDB();
return resultSetToArray($result_set);
echo $_DB->error . '<br />';
Не показывает ничего.
5. Проверяю код на кириллицу, переписал отдельные куски. Не помогает.
tikkiwiki
Модератор
Дата регистрации:
15.11.2013 15:36:59
Сообщений: 194
Напишите пожалуйста, в службу поддержки.
Ильюха
Новичок
Дата регистрации:
21.11.2013 22:53:48
Сообщений: 18
Опять? Вчера написал же вопрос. :-)
Пробую войти с мейлом или логином от форума - пишет:
Неверный e-mail и/или пароль!
tikkiwiki
Модератор
Дата регистрации:
15.11.2013 15:36:59
Сообщений: 194
Проверьте поля в БД, ихний тип.
И попробуйте так:
$arraywords = explode(' ', $words);
Ильюха
Новичок
Дата регистрации:
21.11.2013 22:53:48
Сообщений: 18
И попробуйте так:
$arraywords = explode(' ', $words);
Да!
Бинго. :-)
Но у Михаила в уроке имеенно ", не '.
C чем связано? Настройки Notepad++?
Спасибо,
tikkiwiki!
tikkiwiki
Модератор
Дата регистрации:
15.11.2013 15:36:59
Сообщений: 194
Обращайтесь, если у Вас возникнут какие-то вопросы.