За последние 24 часа нас посетил 49861 программист и 1730 роботов. Сейчас ищут 755 программистов ...

Проблемы с поиском в БД

Тема в разделе "PHP для новичков", создана пользователем ekip, 11 сен 2009.

  1. ekip

    ekip Активный пользователь

    С нами с:
    11 авг 2009
    Сообщения:
    118
    Симпатии:
    0
    Помогите пожалуйста разобраться. У меня проблемы с поиском причем на домашнем денвере все работало замечательно, перенес на хост - работать перестало :cry: . Вероятно в обработчик result.php приходят краказябры, т.е. неверная кодировка потому обработчик выводит результат "Ничего не найдено".

    Все странички в кодировке: UTF-8
    БД Mysql все в кодировке: UTF-8

    Видимо что то с POST приходит не то, кто сталкивался подскажите...

    Файл с формой: index.php

    HTML:
    1. <meta http-equiv="content-type" content="text/html" Charset="UTF-8" />
    2. <form action="result.php"  method="post">
    3. <input class="search" size="20" name="search" id="searchsite" value="Поиск..">
    4. <input value="Поиск »" class="submit" type="submit" >
    5. </form>
    6. </html>


    Обработчик: result.php

    PHP:
    1. <?php
    2. require 'connect.php';
    3. $table = 'news';
    4. $search = mysql_real_escape_string($_POST['search']);
    5. $select_sql = "SELECT * FROM $table WHERE `text` LIKE '%$search%' OR `text` LIKE '%$search%' ORDER BY id" ;
    6. $result = MYSQL_QUERY($select_sql);
    7. if(!$result) exit(mysql_error());
    8. $query = "SELECT * FROM $table WHERE `text` LIKE '%$search%' OR `text` LIKE '%$search%' ";
    9. $ctg = mysql_query($query);
    10. if (mysql_num_rows($result) > 0)
    11. {
    12. echo '<br><center><b class="zag">Результат поиска</b></center><br><img src="image/stick5.gif" align="left"><b class="inf">
    13. Найдено совпадений: '.mysql_num_rows($result).'</b><hr><br>';
    14. WHILE ($arr = mysql_fetch_array($result))
    15. {
    16. $id = $arr['id'];
    17. $text = $arr['text'];
    18. $type = $arr['imagesmall'];
    19. $class = $arr['imagebig'];
    20. $short = $arr['short'];
    21. $fotos = $arr['zagolovok'];
    22. $autor = $arr['autor'];
    23. $textshort = $arr['textshort'];
    24. $date = $arr['data'];
    25. if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $data))
    26. echo '
    27. <div id="vivod">'.$id.'<br>'.$text.'</div>';
    28. }
    29. }
    30. else
    31. {
    32. echo 'Ничего не найдено';
    33. }
    34. ?>
     
  2. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    ekip
    mysql_query('SET NAMES `utf8`');
     
  3. ekip

    ekip Активный пользователь

    С нами с:
    11 авг 2009
    Сообщения:
    118
    Симпатии:
    0
    admyx спасибо огромное! Помогло.
     
  4. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    ekip
    Не за что
     
  5. ekip

    ekip Активный пользователь

    С нами с:
    11 авг 2009
    Сообщения:
    118
    Симпатии:
    0
    Еще возник следующий вопрос.
    Если поиск осуществляется через библиотеку prototype.js

    И сам подключаемый script.js

    [js]function search() {
    var sSearch = $F("search_input");

    if (sSearch.length < 3)
    {
    alert("Запрос должен быть не короче 3-х символов.");
    return false;
    }

    $('search_results').hide();
    $('searching').show();

    new Ajax.Updater('search_results', 'search.php',
    { method: 'get',
    parameters: { search: sSearch },
    onComplete: function () {
    $('search_results').show();
    $('searching').hide();
    }
    }
    );
    }[/js]

    HTML:
    1. <meta http-equiv="content-type" content="text/html" Charset="UTF-8" />
    2. <script type="text/javascript" src="/script.js"></script>
    3. <script src="/prototype.js" type="text/javascript"></script>
    4. <script type="text/javascript"></script>
    5. <div id="result"><br>
    6. <h4>Поиск в базе</h4>
    7. <div id="wrap">
    8. <form onsubmit="search(); return false;">
    9. <input type="text" class="search" id="search_input" value=""> <input type="submit" class="submit" id="search_button" value="Поиск &raquo; ">
    10. </form><br>
    11. <div id="search_results">
    12. </div>
    13. <div id="searching" style="display: none">
    14. поиск
    15. </div>
    16. </div>
    17. </div>

    После заполнения формы, отправляем его скрипту на проверку валидности не менее 3-х символов если да то передаем далее данные скриптуsearch.php

    search.php:

    PHP:
    1. <?php
    2. include 'config.php';
    3.   header('Content-type: application/html; charset=utf-8');
    4.   header('Cache-Control: no-cache');
    5.  
    6.   $sString = mysql_real_escape_string($_GET["search"], $db);
    7.   $sql="SELECT * FROM `announce` WHERE `text` LIKE '%$sString%' OR `text` LIKE '%$sString%' ORDER BY `id` DESC ";
    8.   $rs=mysql_query($sql,$db);
    9.     mysql_query('SET NAMES `utf-8`');
    10.   if (mysql_num_rows($rs) > 0)
    11.   {
    12.     while ($row = mysql_fetch_array($rs))
    13.     {
    14.       $text=htmlspecialchars(strip_tags($row["text"]));
    15.       if (mb_strlen($text, "utf-8") > 250) $test = mb_substr($text, 0, 250, "utf-8") . "...";
    16.       $date = $row['data'];
    17. if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $data))
    18. echo '
    19. <table cellspacing="1"   valign="top" width="100%">
    20. <tr>
    21. <td bgcolor="#ffffff" width="120">
    22. <img src="'.htmlspecialchars($row["foto"]).'" align="left">
    23. </td>
    24. <td align="left">
    25. '.htmlspecialchars($row["class"]).'<br>
    26. '.htmlspecialchars($row["text"]).'<br><br>
    27. '.htmlspecialchars($row["cash"]).'<br>
    28. Контактная информация: <b>'.htmlspecialchars($row["contact"]).'</b><br>
    29. </td>
    30. </tr>
    31. <tr>
    32. <td COLSPAN="2">
    33. <div id="down"><img src="image/stick12.gif"> <a>Добавлено: </a> '.$data[3].'-'.$data[2].'-'.$data[1].' г.</div>
    34. </td>
    35. </b></tr>
    36.  
    37. </table>';
    38.  
    39.     }
    40.   }
    41.   else
    42.   {
    43.   echo 'Ничего не найдено';
    44.   }
    45. ?>
    Если в вышеописанном примере помогло, назначить кодировку, то тут не получается, вероятно вся проблема в передаче GET через скрипт.
    Как можно это исправить?
     
  6. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1