Трудности при поиске русских слов по базе

Тема в разделе "Как сделать...", создана пользователем karen12, 15 сен 2014.

Статус темы:
Закрыта.
  1. karen12

    karen12 Постоялец Нарушитель

    Регистр.:
    26 фев 2012
    Сообщения:
    80
    Симпатии:
    1
    Есть таблица
    PHP:
    CREATE TABLE IF NOT EXISTS `reception` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    last_nametext NOT NULL,
      `
    first_nametext NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=;
    есть скрипт поиска

    $res=mysql_query("SELECT * FROM reception WHERE ((`last_name` LIKE '%".$search."%') OR (`first_name` LIKE '%".$search."%') ");

    все файлы на UTF8
    при подключение к базе mysql_query("SET NAMES `utf8`");
    кодировка таблицы utf8_general_ci

    при поиске русские слова не выводятса , в то время как слова написанные англискими буквами выводятся отлично, в чем может быть проблема?
     
    Шумадан нравится это.
  2. Demian12

    Demian12 Создатель

    Регистр.:
    13 авг 2014
    Сообщения:
    12
    Симпатии:
    9
    А кодировка запроса тоже UTF8? точно?
     
  3. karen12

    karen12 Постоялец Нарушитель

    Регистр.:
    26 фев 2012
    Сообщения:
    80
    Симпатии:
    1
    а как и где проверит это?
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    на странице указана кодировка в виде?
    Код:
    <meta charset="utf-8" />
     
  5. karen12

    karen12 Постоялец Нарушитель

    Регистр.:
    26 фев 2012
    Сообщения:
    80
    Симпатии:
    1
    да вот так <meta charset="utf-8" />

    вы не можете мне помочь?
     
    Последнее редактирование модератором: 15 сен 2014
  6. Demian12

    Demian12 Создатель

    Регистр.:
    13 авг 2014
    Сообщения:
    12
    Симпатии:
    9
    На вид правильно. Соответственно, должно искаться, если никаких иных проблем нет. Попробуйте все же подключиться напрямую к базе (через phpmyadmin, например) и сделать запросы вручную. Явной ошибки не видно, если только скрытые. Наиболее вероятно - в $search лежит строка, которую сервер не может найти в базе, это может быть:
    - неверная кодировка
    - пробелы лишние

    Как-то ещё помочь, не имея доступа к БД, крайне сложно.
     
  7. karen12

    karen12 Постоялец Нарушитель

    Регистр.:
    26 фев 2012
    Сообщения:
    80
    Симпатии:
    1
    я пробовал удалить внутрение кавычки и оставить только одну выборку, все выводит, сделал вот так
    $res=mysql_query("SELECT * FROM reception WHERE (`last_name` LIKE '%".$search."%')";
    а было вот так
    $res=mysql_query("SELECT * FROM reception WHERE ((`last_name` LIKE '%".$search."%') OR (`first_name` LIKE '%".$search."%') ");

    на странице обработки и вывода есть еще
    PHP:
              <?php
       $search 
    $_POST['search'];
    if (empty(
    $search)){
    echo 
    "<h2>Поле не заполнено</h2>";
    }
    $search trim($search);
    $search stripslashes($search);
    $search htmlspecialchars($search);  

    ?>
     
  8. Demian12

    Demian12 Создатель

    Регистр.:
    13 авг 2014
    Сообщения:
    12
    Симпатии:
    9

    здесь ошибка со скобками. Уберите 1 открывающий скобку после where.
     
  9. karen12

    karen12 Постоялец Нарушитель

    Регистр.:
    26 фев 2012
    Сообщения:
    80
    Симпатии:
    1
    это я ошибся - хотел упрастить код для показа, весь код выглядит так
    PHP:
      <table border="2" class="table  table-ayc-f table_all_recept" >
             <tr>
               <th style="text-align:center;" width="40">N</th>
               <th style="text-align:center;" width="120">Дата поступления</th>
               
                   <th style="text-align:center;" width="120">Дата выписки</th>
                   <th style="text-align:center;" width="330">ФИО</th>
             
               <th style="text-align:center;"  width="120"></th>
             </tr>
           
    <?php
       $search 
    $_POST['search'];
    if (empty(
    $search)){
    echo 
    "<h2>Поле не заполнено</h2>";
    }
    $search trim($search);
    $search stripslashes($search);
    $search htmlspecialchars($search);   

    $res=mysql_query("SELECT * FROM `reception`WHERE  ((`last_name`LIKE '%".$search."%') OR (`first_name`LIKE '%".$search."%')  OR (`date_in`LIKE '%".$search."%') OR (`date_replace_out` LIKE '%".$search."%'))  AND `patient_userid`= '".$_SESSION['id']."'");
    if (
    $res)
    {
    $i=mysql_num_rows($res);

    while (
    $row mysql_fetch_array($res))
    {
       echo 
    "
           <tr>
             <td style='text-align:center;'>"
    .$i--."</td>
               <td style='text-align:center;'> <a  href='recuest/reception_view.php?id="
    .$row['id']."'>".$row['date_in']."</a></td>
               <td style='text-align:center;'><a  href='recuest/reception_view.php?id="
    .$row["id"]." ' >
                 "
    .$row["date_replace_out"]."</a></td>
                 <td style='text-align:center;'><a  href='recuest/reception_view.php?id="
    .$row['id']."'>".$row['last_name']."  ".$row['first_name']."  ".$row['second_name']."</a></td>
           
               <td style='text-align:center;'><a  title='Խմբագրել' class='btn btn-primary' href='recuest/reception_edit.php?id="
    .$row['id']."'><i class='icon-edit'></i></a>&nbsp;&nbsp;
               <a class='btn btn-danger'  title='Ջնջել'  href='recuest/reception_delete.php?id="
    .$row['id']."'><i class='icon-trash'></i></a>
             
               </td>
             </tr>
       "
    ;
    }
    mysql_free_result($res);
    }
    echo
    "
         </table>   

       "
    ;
    ?>

     
  10. Demian12

    Demian12 Создатель

    Регистр.:
    13 авг 2014
    Сообщения:
    12
    Симпатии:
    9
    А вы "AND patient_userid..." в конце убирали? Или с ним заработало?
     
Статус темы:
Закрыта.