За последние 24 часа нас посетили 17459 программистов и 1725 роботов. Сейчас ищут 977 программистов ...

Поиск по сайту

Тема в разделе "PHP и базы данных", создана пользователем viphost, 19 май 2011.

  1. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Здравствуйте, помогите реализовать поиск по сайту
    Скрипт самописный, а поиска нет на нем, да и в php я не разбираюсь

    может быть кто подскажет

    вот структура самой таблица
    [sql]CREATE TABLE IF NOT EXISTS `vws_wallpaper` (
    `id` int(11) NOT NULL auto_increment,
    `img` varchar(250) default NULL COMMENT 'image and thumb same name',
    `name` varchar(250) default NULL,
    `artist` varchar(250) default NULL COMMENT 'artist name',
    `site` varchar(250) default NULL COMMENT 'artists site',
    `description` varchar(2000) default NULL,
    `tags` varchar(250) default NULL COMMENT 'comma seprated tags for easy reading',
    `size` varchar(20) default NULL COMMENT '1024x800 size',
    `dwn` int(11) NOT NULL default '0',
    `rank` int(11) NOT NULL default '0',
    `public` tinyint(1) NOT NULL default '1' COMMENT '0:pending;1:public;',
    `votes` int(11) NOT NULL default '0' COMMENT 'number of votes',
    `num_comments` int(11) default '0' COMMENT 'nuber of approved comments',
    `num_all_comments` int(11) default '0' COMMENT 'number of all comments, pending and approved for checking comment limit',
    `d1` int(11) NOT NULL,
    `d2` int(11) NOT NULL,
    `d3` int(11) NOT NULL,
    `d4` int(11) NOT NULL,
    `d5` int(11) NOT NULL,
    `d6` int(11) NOT NULL,
    `d7` int(11) NOT NULL,
    `week` int(11) NOT NULL,
    `ip` varchar(32) default NULL,
    `added_at` int(11) default NULL,
    `added_by` int(11) NOT NULL default '0',
    `off` tinyint(1) NOT NULL default '1',
    PRIMARY KEY (`id`),
    KEY `w_state` (`public`,`id`),
    KEY `w_dwn` (`dwn`),
    KEY `w_rank` (`rank`),
    KEY `w_week` (`week`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1273 ;[/sql]

    Нужно искать в ячейке name, там названия новостей

    И как то вывести на страницу скажем 20 найденных статей.
    Если это не сложное что то, подскажите пожалуйста. Спасибо.
     
  2. aleksb

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

    С нами с:
    11 май 2011
    Сообщения:
    28
    Симпатии:
    0
    Это форма:

    HTML:
    1. <form action="action-search.php" method="post" name="form_s">
    2. <input class="search_input" name="search" type="text" size="50" maxlength="60" onblur="if(this.value=='') this.value='Поиск '" onfocus="if(this.value =='Поиск' ) this.value=''" value="Поиск">
    3. <input class="search_b" name="submit_s" type="submit" value="Найти">
    4. </form>
    Это action-search.php:

    PHP:
    1. <?php
    2. if (isset($_POST['submit_s']))
    3. {
    4. $submit_s = $_POST['submit_s'];
    5. }
    6.  
    7. if (isset($_POST['search']))
    8. {
    9. $search = $_POST['search'];
    10. }
    11.  
    12. if (isset($submit_s))
    13. {
    14.  
    15. if (empty($search) or strlen($search) < 3)
    16. {
    17. exit ("<p>Поисковый запрос не введен, либо он менее 3-х символов.</p>");
    18. }
    19.  
    20. $search = trim($search);
    21. $search = stripslashes($search);
    22. $search = htmlspecialchars($search);
    23.  
    24. }
    25.  
    26. else
    27. {
    28. exit("<p>Вы обратились к файлу без необходимых параметров.</p>");
    29. }
    30. ?>
    31. <?php
    32. $result = mysql_query("SELECT * FROM vws_wallpaper WHERE  (name like '%".$search."%')");
    33. if (!$result)
    34. {
    35. echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору. <br> <strong>Код ошибки:</strong></p>";
    36. }
    37.  
    38. if (mysql_num_rows($result) > 0)
    39.  
    40. {
    41. $myrow = mysql_fetch_array($result);
    42.  
    43. do
    44. {
    45.  
    46. printf ("".$myrow["name"].",'<br>'");  //Тут выводи как тебе надо..
    47.  
    48.  
    49. }
    50.  
    51. while ($myrow = mysql_fetch_array($result));
    52.  
    53. }
    54.  
    55. else
    56. {
    57. echo "<p>Информация по Вашему запросу не найдена.</p>";
    58. exit();
    59. }
    60. ?>
     
  3. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    раз уж тема зашла.

    PHP:
    1. <?
    2. function universal_like_escape($str) {
    3. return '%'.str_replace('*','%',addCslashes(mysql_real_escape_string(str_replace('\\','\\\\',$str)),'_% ')).'%';
    4. }
    насколько эта функция универсальна для экранирования LIKE выражений?

    вместо

    Код (Text):
    1.  $search = trim($search);
    2.  $search = stripslashes($search);
    3.  $search = htmlspecialchars($search);
     
  4. aleksb

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

    С нами с:
    11 май 2011
    Сообщения:
    28
    Симпатии:
    0
    Согласен
     
  5. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    ооо спасибо большое, раньше не смог выйти в интернет, только сейчас выбрался, сейчас попробую протестирую =)

    все разобрался добавил еще
    PHP:
    а то не искала по русским символам
    Спасибо всем кто помог!
     
  6. epocalips

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

    С нами с:
    26 мар 2011
    Сообщения:
    31
    Симпатии:
    0
    Адрес:
    UA/Lviv
    а если $search содержит несколько слов? как тут лучше сделать?
    просто разделить строку по словам и искать сначала в комбинации, а потом по каждому отдельно?