Jump to content
  • 0

PHP скрипт поиска по сайту


rus
 Share

Question

Посоветуйте кто-нибудь пожалуйста скрипт поиска по сайту, с тем условием что сайт полностью использует бд.

Искал, искал в инете, но либо они индексируют статичный html, либо очень сложны в установке...

P.S. перепробовал около 50 разных скриптов.

Link to comment
Share on other sites

23 answers to this question

Recommended Posts

  • 0
Кстати, в вопросе MySQL не прозвучало, но принципы характерны почти для всех БД.

Ну да, я именно MySQL и имел ввиду, извините за неточность. :)

Спасибо за подсказки, попробую, результат обязательно сообщу.

Link to comment
Share on other sites

  • 0

Помогите пожалуйста разобраться.

Не понимаю, в принципе, как я понял по той ссылке что дал Vlad, там тупо нужно поменять их данные на свои, полазил по документации по MYSQL запросам и никакого подробного описания для себя не нашел.

Вот форма:

<form action="./search/search.php" method="post">
<input type="text" size="20" name="" value="">
<input type="submit" name="submit" value="Искать">
</form>

Я переделал как обычный поиск, не так как здесь: http://www.php.su/articles/?cat=phpdb&page=015.

Вот код:

<?php

include("../bloks/bd.php");

$search = substr($search, 0, 64);
$search = preg_replace("/[^wx7F-xFFs]/", " ", $search);
$good = trim(preg_replace("/s(S{1,2})s/", " ", ereg_replace(" +", " "," $search ")));
$good = ereg_replace(" +", " ", $good);

$query = "SELECT * FROM lessons WHERE title LIKE '%". str_replace(" ", "%' OR title LIKE '%", $good). "%'";
$word = explode(" ", $search);
while (list($v) = each($word)) {
if (strlen($v)>2)
$stat[]="$v:".
mysql_num_rows(mysql_query("SELECT * FROM lessons WHERE title LIKE '%$v%'"));
else
$stat[]="$v: <font color=#cc0000>короткое</font>";
};
$word_stats = "Статистика слов: ". implode("", $stat). "
";
unset($stat);
if ($page==0)
$request .= "LIMIT $rows_in_page";
else
$request .= "LIMIT ". $page*$rows_in_page. ",". $rows_in_page;
if ($page>0)
print ("<a href=search.php?search=". rawurlencode($good). "&page=". ($page-1).
">предыдущая страница</a>");
if ($page<$results_amount/$rows_in_page)
print ("<a href=search.php?search=". rawurlencode($good). "&page=". ($page+1).
">следующая страница</a>");
$highlight = str_replace(" ", "|", $good);
$row["text"] = ereg_replace($highlight, "<font color=#cc0000>0</font>", $row["text"]);
$text = eregi_replace(">([^<]*)($words)", ">1<font color=#cc0000>2</font>", $text);

?>

Во-первых, ошибки в этой строке:

$row["text"] = ereg_replace($highlight, "<font color=#cc0000>0</font>", $row["text"]);

И в этой:

if ($page<$results_amount/$rows_in_page)

Может кто-нибудь хотя бы кинет ссылку на подробное описание по подобным запросам к базе с выводом информации для начинающего, чтобы хоть понятнее было :)

P.S. извиняюсь, самому за это стыдно, но не получается!!! =(

Link to comment
Share on other sites

  • 0

Селекты в тво?м случае, имхо, лучше выводить циклом, аля:

 $result = mysql_query("SELECT * FROM `menu` ORDER by `id` ASC") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
echo '
<div>'.$row['id'].' - '.$row['name'].' - <a href="../'.$row['url'].'">'.$row['url'].'</a></div>
';
}

Link to comment
Share on other sites

  • 0

Ну да, в этом проблема.

Я так понимаю:

сначала составляется запрос к базе, к такой-то таблице на поиск по какой-то ячейке.

Этот запрос помещается в какую-то переменную, а затем ее нужно вывести.

Я не сильно сократил порядок действий? :)

Link to comment
Share on other sites

  • 0

Попробовал так:

$query = ("SELECT * FROM lessons WHERE title LIKE '$title%'");
$result = mysql_query($query);
while ($row = mysql_fetch_row($result))
{
echo '<div>'.$row['title'].' - '.$row['text'].' - <a href="../'.$row['url'].'">'.$row['url'].'</a></div>';
}

Выводит только одни тире (- -) :)

Link to comment
Share on other sites

  • 0

Вы наверное не знаете, что существует замечательный сайт php.net.

Где в поиске можно забить имя этой функции (mysql_fetch_row) и узнать о том, что

mysql_fetch_row ? Орабатывает ряд результата запроса и возвращает неассоциативный массив.

А если мы посмотрим сюда - mysql_fetch_array ? то увидим:

Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

Где вторым аргументом можно поставить MYSQL_ASSOC, чтобы исключить численный массив.

И эту проблему вы бы легко решили, если бы не поленись самолично узнать, а что содержит этот самый $row, как-нибудь так: print_r($row).

Но похоже пока не судьба.

Link to comment
Share on other sites

  • 0

to LokiDi L0ck:

Об этом сайте знаю, документацию почитал, спасибо, но у меня не получается вывести данные по запросу на какое-либо слово, ну например я ищу слово "html" он мне при таком коде конечно же выдаст просто всю инфу из msql:

$query = ("SELECT * FROM lessons WHERE title LIKE '$title%'");
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
printf ("%s %s", $row["title"], $row["text"]);
}
mysql_free_result($result);

Вы внимательно читали мой пост?

Тот код, ссылку на который предоставил мне Влад - у меня не работает, почему не могу понять, а очень хотелось бы!

P.S. нет, ну ежу конечно понятно, что дело в руках и голове, но тем не менее... :)

Link to comment
Share on other sites

  • 0
Вы уверены, что в переменной $title, присутствует корректный искомый текст?

Может я не подробно описал суть моей проблемы, но она заключается в следующем:

Есть сайт, который полностью весь хранится в mysql и подгружается по запросу к базе.

В базе, на данный момент одна bd и в ней три таблицы, в таблицах разный набор полей, но есть похожие, например "title" - в этих тайтлах везде разное значение, например:

title - груша

text - Груша - это очень полезный фрукт и бла бла бла...

title - Апельсин

text - Апельсин относится к семейству цитрусовых и бла бла бла...

Мне нужно к примеру ввести в инпуте слово "груша" и чтоб вывелся результат поиска именно по этой груше! :)

Link to comment
Share on other sites

  • 0

Покопавшись еще немного в инете, нашел одну реализацию моей идеи по поиску в бд.

Вот форма:

<form action="search.php" method="post">
<input name="search" type="text" size="20" value="">
<input name="submit_s" type="submit" value="Искать">
</form>

А вот собственно и сам файл search.php:

<?php
include("config/conf.php");//Подключение к базе
if (isset($_POST['submit_s']))
{
$submit_s = $_POST['submit_s'];
}
if (isset($_POST['search']))
{
$search = $_POST['search'];
}
if (isset($submit_s))
{
if (empty($search) or strlen($search) < 4)
{
exit ("<p>Поисковый запрос не был введен, либо введен, но менее 4-х символов</p>");
}
$search = trim($search);
$search = stripslashes($search);
$search = htmlspecialchars($search);
}
else
{
exit ("<p>Даже не пытайтесь просмотреть данный файл через браузер!

Все-равно не выйдет!
</p>");
}
?>
<!--Здесь идет начало php страницы вместе с дизайном.-->
<?php
$result = mysql_query("SELECT * FROM lessons WHERE MATCH(text) AGAINST('$search')",$db);
if (!$result)
{
echo "<p>Поиск завершился неудачей! Сообщите об этом автору сайта.

<strong>Код ошибки:</strong>
</p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
do
{
printf ("<table class='tableborder'>
<tr>
<td><p>%s</p></td>
</tr>
<tr>
<td><p>%s</p></td>
</tr>
</table>", $myrow ["title"], $myrow ["text"]);
}
while ($myrow = mysql_fetch_array($result));
}
else
{
echo ("<p>По вашему запросу ничего не найдено!

Введите пожалуйста другое слово.
</p>");
exit();
}
?>
<!--Здесь она заканчивается.-->

Единственный вопрос:

В данном примере ищем только в одной таблице (lessons), а можно как-то искать сразу по всей базе, или по выбранным таблицам? Или кто-нибудь опять скажет что вопрос не к нему?

Link to comment
Share on other sites

  • 0

Жесть :) какаято, если честно.

Лучшее оружие программиста это не поисковик и интернет, а бумага и карандаш - чужие скрипты не всегда благо.

Что тебе мешает по 20 таблицам искать или лень лишние запросы писать? :)

Link to comment
Share on other sites

  • 0

Помогите плис, мож кто знает!

echo mysql_num_rows(mysql_query("SELECT ID FROM games WHERE FULLDESCR LIKE '%$s%'"))."

";

иногда находит правильно все слова, иногда в половине выбранных записей искомых слов нету, иногда вообще все левое

попробывал уже просто в пхпмайадмине

SELECT * FROM games WHERE FULLDESCR LIKE '%духи%' LIMIT 0 , 30

вывело две записи в одной есть слово(в FULLDESCR) в другой нету ((

....

:)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy