Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Реализация поиска по сайту.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alena_pl
Отправлено: 10 Февраля, 2012 - 10:34:02
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Всем, привет! Улыбка
Подскажите, пожалуйста, где можно почитать подробное описание реализации поиска по сайту с использованием MySQL. Просто не хотелось бы пользоваться готовыми скриптами, не вникая в суть.


Спасибо, буду рада помощи. Радость
 
 Top
illy
Отправлено: 10 Февраля, 2012 - 10:36:21
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




В гугле Радость а лучше в нигме Не понял


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
snikers987
Отправлено: 10 Февраля, 2012 - 10:42:54
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




По теме поиска, но не сам поиск
http://forum.php.su/topic.php?fo...33&topic=754


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
alena_pl
Отправлено: 13 Февраля, 2012 - 12:18:51
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Ну вот, нашла пример скрипта поиска:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form name="search" method="post" action="search.php">
  3.     <input type="aearch" name="query" placeholder="Поиск" >
  4.     <button type="submit">Найти</button>
  5. </form>
  6.  
  7.  
  8. <?php
  9. function search ($query)
  10. {
  11.    $query = trim($query);
  12.    $query = htmlspecialchars($query);
  13.    $query = mysql_real_escape_string($query);
  14.    $query = stripslashes($query);
  15.    if (!empty($query))
  16.    {
  17.        if (strlen($query) < 3)
  18.            $text = '<p>Слишком короткий поисковый запрос.</p>
  19.            ';
  20.        else if (strlen($query) > 128)
  21.            $text = '<p>Слишком длинный поисковый запрос.</p>
  22.            ';
  23.        else
  24.        {
  25.            $q = "SELECT `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id` FROM `table_name` WHERE `text` LIKE '%$query%' OR `title` LIKE '%$query%' OR `meta_k` LIKE '%$query%' OR `meta_d` LIKE '%$query%'";
  26.            $result = mysql_query($q);
  27.            if (mysql_affected_rows() > 0)
  28.            {
  29.                $row = mysql_fetch_assoc($result);
  30.                $num = mysql_num_rows($result);
  31.                $text = '<p>По запросу <b>'.$query.'</b> найдено совпадений: '.$num.'</p>
  32.                ';
  33.                do
  34.                {
  35.                    $q1 = "SELECT `link` FROM `table_name` WHERE `uniq_id` = '$row[page_id]'"; // Делаем запрос, получающий ссылки на статьи.
  36.                    $result1 = mysql_query($q1);
  37.                    if (mysql_affected_rows() > 0)
  38.                        $row1 = mysql_fetch_assoc($result1);
  39.                    $text .= '
  40.                    <section class="article_description">
  41.                    <p><a> href="'.$row1['link'].'/'.$row['category'].'/'.$row['uniq_id'].'" title="'.$row['title_link'].'">'.$row['title'].'</a></p>
  42.                    <p>'.$row['desc'].'</p>
  43.                    </section>
  44.                    ';
  45.                }
  46.                while ($row = mysql_fetch_assoc($result));
  47.            }
  48.            else
  49.                $text = '<p>По запросу <b>'.$query.'</b> Ничего не найдено.</p>
  50.                ';
  51.        }
  52.    }
  53.    else
  54.        $text = '<p>Задан пустой поисковый запрос.</p>
  55.        ';
  56.    return $text;
  57. }
  58. ?>
  59.  
  60.  




Однако не совсем понимаю принцип его действия. В частности эту строку:

CODE (htmlphp):
скопировать код в буфер обмена
  1.   $q = "SELECT `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id` FROM `table_name` WHERE `text` LIKE '%$query%' OR `title` LIKE '%$query%' OR `meta_k` LIKE '%$query%' OR `meta_d` LIKE '%$query%'";


Я так поняла, таблица table_name, с колонками `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id`, а вот что такое после WHERE text, title, meta_k, meta_d???


Прошу помощи разобраться новичку!
 
 Top
PATCH
Отправлено: 13 Февраля, 2012 - 12:24:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




Вот это да
CODE (SQL):
скопировать код в буфер обмена
  1. $q = "SELECT `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id` FROM `table_name` WHERE `text` LIKE '%$query%' OR `title` LIKE '%$query%' OR `meta_k` LIKE '%$query%' OR `meta_d` LIKE '%$query%'";
  2. $q = "вытащить поля `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id` из таблицы `table_name` где поле текст `text` равна вхождению '%$query%'  или  где поле текст   `title`равна вхождению '%$query%'  "; и т.д


Цитата:
LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы(wildkards) - специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:

* символ подчеркивания ( _ ) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.

* знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.

Давайте найдем всех заказчиков чьи имена начинаются с G ( вывод показывается в Рисунке 5.7 ):

SELECT
FROM Customers
WHERE cname LIKE 'G%';

GOOGLE FOREVER=)

(Отредактировано автором: 13 Февраля, 2012 - 12:25:48)

 
 Top
alena_pl
Отправлено: 13 Февраля, 2012 - 14:34:32
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Спасибо, очень помогли))))) Теперь понятно. Улыбка Улыбка Улыбка
 
 Top
alena_pl
Отправлено: 15 Февраля, 2012 - 14:22:16
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Всем снова привет! Улыбка
У меня возник ещё один вопрос, связанный с поиском по сайту.

Почитав всё вышеизложенное и ещё много чего в googl Улыбка , написала простенький код поиска по одной таблице articles и по двум полям title и text.


PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include"bd.php";
  4. $search=$_POST["search"];
  5.  
  6. $products = mysql_query("SELECT `title`,`text` FROM articles WHERE `title` LIKE '%$search%'", $db);
  7. $array = mysql_fetch_array($products);
  8.  
  9. do {
  10.         $id = $array['id'];
  11.         $title = $array['title'];              
  12.         $text = $array['text'];
  13.  
  14.         printf($title);
  15.  
  16.        
  17. } while ($array = mysql_fetch_array($products));
  18. if($products){
  19.  
  20. }
  21. else{
  22.   mysql_query($products, $db) or die(mysql_error());
  23.  
  24. }
  25.  
  26. ?>
  27.  


Каким образом можно дополнить данный код, что бы он выводил ссылки на искомую информацию и при нажатии на данную ссылку, мы переходили на страницу с искомой информацией.

Буду рада помощи Улыбка
 
 Top
Zuldek
Отправлено: 15 Февраля, 2012 - 15:13:41
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Это зависит от того каким образом у вас формируются ссылки на статьи.
У вас в базе есть id title и text.
Если попасть на статью можно по адресу вида site.ru/articles.php?id=100

то тогда, измените код вывода результатов поиска примерно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ...
  2. do {
  3.         $id = $array['id'];
  4.         $title = $array['title'];          
  5.         $text = $array['text'];
  6.          printf("<a href='http://site.ru/articles.php?id=".$array['id']."'>".$title."</a>");
  7. ...

если выводите в результатах поиска только заголовки с ссылками на страницы со статьями то извлечение текста статьи и запись его в переменную $text не имеет смысла и просто тратит память.

(Отредактировано автором: 15 Февраля, 2012 - 15:16:06)

 
 Top
snikers987
Отправлено: 15 Февраля, 2012 - 15:49:12
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




alena_pl Ваш запрос ищет только по полю title
И зачем вам такие огороды с do while?
Смысл кода после цикла вообще не понятен..
Также хочу отметить что результаты такого поиска будут не ахти, к примеру по запросу "Ложка" не найдет "Ложки" и т.п.

(Отредактировано автором: 15 Февраля, 2012 - 15:56:14)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
alena_pl
Отправлено: 16 Февраля, 2012 - 09:45:54
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Всем спасибо за помощь, исправляюсь:

search.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include"bd.php";
  4. $search=$_POST["search"];
  5.  
  6. $products = mysql_query("SELECT `id`,`title`,`text` FROM articles WHERE `title` LIKE '%$search%'", $db);
  7. while($array = mysql_fetch_array($products)){
  8.  
  9.         printf('<p><a href="articles.php?id='.$array['id'].'">'.$array['title'].'</a>');
  10.         }      
  11.  
  12.  
  13. ?>
  14.  

articles.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include"bd.php";
  4.  
  5. $result = mysql_query("SELECT * FROM articles WHERE `id`= '".$_GET["id"]."'");
  6. while($array = mysql_fetch_array($result)){
  7. printf($array['text']);
  8. }
  9.  
  10. ?>
  11.  


По поводу результата поиска....да ложки не ищет.. Огорчение
Может подскажите какую литературу на эту тему почитать?
 
 Top
snikers987
Отправлено: 16 Февраля, 2012 - 11:21:37
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Читаем третий пост


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB