За последние 24 часа нас посетили 16769 программистов и 1635 роботов. Сейчас ищут 920 программистов ...

Скрипт поиска ищет в базе поля, но только английскими символ

Тема в разделе "PHP для новичков", создана пользователем fartuk, 30 ноя 2013.

  1. fartuk

    fartuk Новичок

    С нами с:
    29 окт 2013
    Сообщения:
    40
    Симпатии:
    0
    Здравствуйте. Вот код

    header ("Content-type:text/html; charset=utf-8");

    /////////////// Определяем используемые функции //////////////////

    /* Открываем соединение с базой данных*/
    function connectDB (){
    // Определяем константы для соединения с базой данных
    define('DB_HOST', 'localhost');
    define('DB_USER', '');
    define('DB_PASS', '');
    define('DB_NAME', '');

    //Пытаемся соединится с базой данных
    $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS)
    or die("Ошибка соединения с базой данных! " . mysql_error());
    //и выбрать таблицу
    mysql_select_db('table');
    // Устанавливаем кодировку
    mysql_query('SET NAMES utf-8');
    //Возвращаем дескриптор соединения
    return $dbconn;
    }

    /*Закрываем соединение с базой данных*/
    function closeDB($dbconn){
    mysql_close($dbconn);
    }

    /*Обработка поискового запроса*/
    function search ($query) {
    $text = '';

    // Проводим фильтрацию данных
    $query = trim($query); // Обрезаем пробелы и спецсиволы
    $query = strip_tags($query); // Удаляем HTML и PHP теги
    $query = mysql_real_escape_string($query); // Экранируем специальные символы


    //Поисковый запрос не пустой?
    if (!empty($query)){
    if (strlen($query) < 1) {
    $text = '<p>короткий поисковый запрос.</p>';
    }elseif (strlen($query) > 128) {
    $text = '<p>длинный поисковый запрос.</p>';
    } else {

    //Формируем строку поискового запроса
    $sql =mysql_query("SELECT id, name, cena, dostavka, dop
    FROM `tovari` WHERE `dop` LIKE '%$query%'
    OR `name` LIKE '%$query%'
    OR `id` LIKE '%$query%'");

    // и выполняем его
    $query1= mysql_query("select * from tovari WHERE id=84");
    $row1 = mysql_fetch_array($query1);


    //Определим колличество найденных совпадений
    $num = mysql_num_rows($sql);
    //Если число совпадений (строк результата запроса) больше 0
    if ( $num > -1) {
    //Получаем ассоциативный массив
    $row = mysql_fetch_array($sql);

    //и начинаем формировать строку поисковой выдачи
    $text .= 'По вашему запросу <strong>'.$query.'</strong>';
    $text .= ' найдено '.$num.' совпадений</br></br>' ;

    do {
    //Продолжаем формировать строку поисковой выдачи
    $text .=$row['name'];


    // Делаем это пока у нас есть результаты
    } while ($row = mysql_fetch_array($sql));




    } else {
    // Найти совпадение не удалось
    $text = 'По вашему запросу ничего не найдено.';
    }
    }
    }else {
    $text = 'Задан пустой поисковый запрос.';
    }
    //Возвращаем сформированную строку поисковой выдачи
    return $text;
    }

    ///////////// Сам скрипт обработчик ///////////////
    if (isset ($_POST['query'])){
    // Открываем соединение с базой данных
    $connect = connectDB();
    $search_result = search ($_POST['query']);
    echo $search_result;
    // Закрываем соединение с базой данных
    closeDB ($connect);
    }


    Но если запустить, то работает только с ангийскими символами и цифрами. Т.е. в базе с кодировкой utf-8 есть поля с русскими символами, но ищет только англ. Объясните пожалуйста, из-за чего это может быть?