Никак не могу разобраться с циклом foreach. Необходимо перебирать массив, в котором слова поискового запроса и выводить полученные результаты на страницу. Но после всей обработки поискового запроса, функция count() мне выдаёт нулевое значение массива, в котором должны быть извлечены данные, соответствующие поисковому запросу.
Код обработчика такой:
<?phpif (isset($submit)) {if (empty($query) or strlen($query) < 6) {echo "<div class='search_title_attention'>Поисковый запрос не введён, либо он менее 3-х символов кириллицы<br>или менее 6-ти символов латиницы!</div>";} /*Начало вывода*/else {print_r($query);$words = clearQuery($query);print_r($words);if ($select == 'all') {searchArticles($words);$count = count($array);echo $count;}}}else {echo "<div class='search_title_attention'>Вы обратились к файлу без необходимых параметров!</div>";}?>
Функции, которые используются:
<?php/*Функция обрезки окончаний слов*/function dropBackWords($word) {$reg = "/(а|я|о|е|ь|и|ы|ая|яя|ое|ее|ый|ать|ять|еть|уть|у|ю|ем|ешь|ете|ет|ут|ют|ал|ял|ала|яла|али|яли|ул|ула|ули)(\s|$)/ui"; //данная регулярная функция будет искать совпадения окончаний$word = preg_replace($reg,'',$word);return $word;}/*Функция уничтожения стоп-слов*/function stopWords($query) { //тут мы обрабатываем весь поисковый запрос$reg = "/(^|\s)(а|без|более|бы|был|была|были|было|быть|в|вам|вас|весь|во|вот|все|всего|всех|вы|где|да|даже|для|до|его|ее|если|есть|еще|же|за|здесь|и|из|или|им|их|к|как|ко|когда|кто|ли|либо|мне|может|мы|на|надо|наш|не|него|нее|нет|ни|них|но|ну|о|об|однако|он|она|они|оно|от|очень|по|под|при|с|со|так|также|такой|там|те|тем|то|того|тоже|той|только|том|ты|у|уже|хотя|чего|чей|чем|что|чтобы|чье|чья|эта|эти|это|я)($|\s)/ui"; //данная регулярка отрежет все стоп-слова отбитые пробелами$query = preg_replace($reg,'',$query);return $query;}/*Функция подготовки поискового запроса*/function clearQuery($query) {$query = stripcslashes($query);$query = htmlspecialchars($query);$words = explode(" ",$query);$words = stopWords($words);$i = 0;$keywords = "";foreach ($words as $word) {$word = trim($word);$regv = '/^([а-я0-9]+)$/i';$count = (preg_match($regv, $word)) ? 6 : 3;if (strlen($word)<$count) {unset($word);}else {if (strlen($word)>8) {$keywords[$i]=dropBackWords($word);$i++;}else {$keywords[$i]=$word;$i++;}}}return $keywords;}function dataToArray($data) {$array = array();while (($row = $data->fetch()) !=false)$array[] = $row;return $array;}function searchArticles($words) {$query_search = "";foreach ($words as $key => $value) {if (isset($words[$key - 1])) {$query_search .= " OR ";$query_search .= "(title LIKE '%' . $value . '%' OR text LIKE '%' . $value . '%')";}}try {$pdo = new PDO("mysql:host=xxx; dbname=xxxx", "xxx", "xxx");$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);}catch (PDOException $e) {echo "<p>Запрос на выборку данных из бызы не прошёл. Напишите об этом администратору <a href='mailto:admin@torawhite.ru'>admin@torawhite.ru</a>.</p><br>ERROR: " . $e->getMessage();exit;}$sql = 'SELECT * FROM male_articles WHERE :query_search';$data = $pdo->prepare($sql);$data->bindParam(':query_search', $query_search);$data->execute();return dataToArray($data);}?>
Ещё прошу развеять сомнения насчёт подключения к базе данных - я так понимаю, что подключение нужно обязательно использовать в функции, обозначить подключение вначале самой страницы результатов не даст?
echo $count;
Выводит 0, а должен найти запись. В поисковый запрос ввожу только то, что точно есть в базе данных.
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.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
Torawhite
Здравствуйте!
Никак не могу разобраться с циклом foreach. Необходимо перебирать массив, в котором слова поискового запроса и выводить полученные результаты на страницу. Но после всей обработки поискового запроса, функция count() мне выдаёт нулевое значение массива, в котором должны быть извлечены данные, соответствующие поисковому запросу.
Код обработчика такой:
Функции, которые используются:
Ещё прошу развеять сомнения насчёт подключения к базе данных - я так понимаю, что подключение нужно обязательно использовать в функции, обозначить подключение вначале самой страницы результатов не даст?
Выводит 0, а должен найти запись. В поисковый запрос ввожу только то, что точно есть в базе данных.
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
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.