@lemonlimelike

Что не так с поиском по сайту?

Нашел один из скриптов поиска, все изменил, но выводит ошибку Class 'db' not found на 6 строке. В чем проблема?
<?php
//получаем данные через $_POST
if (isset($_POST['search'])) {
    // подключаемся к базе
    include('/includes/config.php');
    $db = new db();
    // никогда не доверяйте входящим данным! Фильтруйте всё!
    $word = mysql_real_escape_string($_POST['search']);
    // Строим запрос
    $sql = "SELECT * FROM `videos` WHERE `title` LIKE '%" . $word . "%' ORDER BY title LIMIT 10";
    // Получаем результаты
    $row = $db->select_list($sql);
    if(count($row)) {
        $end_result = '';
        foreach($row as $r) {
            $result         = $r['title'];
            $bold           = '<span class="found">' . $word . '</span>';
            $end_result     .= '<li>' . str_ireplace($word, $bold, $result) . '</li>';
        }
        echo $end_result;
    } else {
        echo '<li>По вашему запросу ничего не найдено</li>';
    }
}
?>
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
twobomb
@twobomb
Крч.
Данные:
БД Mysql логин root пароль 123456 имя базы данных my_bd_name хост localhost
Структура бд
1 таблица videos
Поля id, title,description,category
Данные скрин2b1706e4d09e4d6e943c8e236a71121e.PNGКод index.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form method="post" action="search.php">
   			<input type="text" name="search" id="search_box" class='search_box'/>
   			<input type="submit" value="Поиск" class="search_button" /><br />
    </form>
</body>
</html>

Код search.php
<?PHP
function search ($query) 
{ 
    $query = trim($query); 
    $query = htmlspecialchars($query);

    if (!empty($query)) 
    { 
        if (strlen($query) < 1) {
            $text = '<p>Слишком короткий поисковый запрос.</p>';
        } else if (strlen($query) > 128) {
            $text = '<p>Слишком длинный поисковый запрос.</p>';
        } else { 
           $con = mysqli_connect("localhost","root","123456","my_bd_name") or die(mysqli_error($con));//Тут твои значения
            $q = "SELECT * FROM `videos` WHERE `title` LIKE '%$query%'";

            $result = mysqli_query($con,$q);

            if (mysqli_num_rows($result) > 0) { 
                $num = mysqli_num_rows($result);

                $text = '<p>По запросу <b>'.$query.'</b> найдено '.$num. ' совпадений</p>';

                while ($row = mysqli_fetch_assoc($result)){
                    $text .= "<div id='film{$row['id']}'>";
                    $text .= "<p>Название: {$row['title']}</p>";
                    $text .= "<p>Описание: {$row['description']}</p>";
                    $text .= "<p>Жанр: {$row['category']}</p>";
                    $text .= "</div>";
                }
            } else {
                $text = '<p>По вашему запросу ничего не найдено.</p>';
            }
        } 
    } else {
        $text = '<p>Задан пустой поисковый запрос.</p>';
    }

    return $text; 
} 

?>
<?php 
if($_SERVER["REQUEST_METHOD"] == "POST"){
    if (isset($_POST['search'])) { 
        $search_result = search ($_POST['search']); 
        echo $search_result; 
    }
}
?>

Код работает 100% ece652abe73b457283fc77fcbd3e6885.PNG4eaac31b496a47afa5e5c9d925d3c353.PNG
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ipokos
Исходя из строки:
$row = $db->select_list($sql);
В $db у вас создается объект для работы с базой, который у вас в этом файле не подключен.

Когда проект увеличивается (классов становится больше), достаточно проблематично, "ходить" и подключать их (да и в целом это не правильно).
Для этого используются автолоадеры.
Например:
$class_name = 'db';
spl_autoload_register(function ($class_name) {
    require( '../folder_name_classes/' . $class_name . '.php');
});

Подключаете файл с автолоадером и вызываете нужные классы.
Ответ написан
Комментировать
djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))
Видимо, используется сторонняя библиотека классов, которую вы забыли подключить или подключили неправильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы