Реализация поиска на сайте

Статус
Закрыто для дальнейших ответов.

zeromind

Новичок
Регистрация
14.04.2011
Сообщения
3
вообщем делаю простой поиск по сайту со следующим кодом:

Код:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<?php  include ("blocks/bd.php");

if (isset($_POST['author']))
{
$author = $_POST['author'];
}

if (isset($_POST['text']))
{
$text = $_POST['text'];
}

if (isset($_POST['pr']))
{
$pr = $_POST['pr'];
}

if (isset($_POST['sub_com']))
{
$sub_com = $_POST['sub_com'];
}

if (isset($_POST['id']))
{
$id = $_POST['id'];
}

if (isset($sub_com))
{
if (isset($author)) {trim($author);   }
else {$author = "";}

if (isset($text)) {trim($text);   }
else {$text = "";}

if (empty($author) or empty($text))
{
exit ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");
}

$author = stripslashes($author);
$text = stripslashes($text);
$author = htmlspecialchars($author);
$text = htmlspecialchars($text);

$result = mysql_query ("SELECT sum FROM comments_setting",$db);
$myrow = mysql_fetch_array($result);

if ($pr == $myrow["sum"])
{
$date = date("Y-m-d H:i");
$result2 = mysql_query ("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author','$text'
,'$date')",$db);

$address = "gordonqq@yandex.ru";
$subject = "Новый комментарий на блоге";
$result3 = mysql_query ("SELECT title FROM data WHERE id='$id'",$db);
$myrow3 = mysql_fetch_array ($result3);
$post_title = $myrow3["title"];
$message = "Появился комментарий к заметке - ".$post_title."\nКомментарий добавил(а): ".$author."\nТекст комментария: ".$text."\nСсылка на заметку: http://localhost/phpsite/view_post.php?id=".$id.
"";
mail($address,$subject,$message,"Content-
type:text/plain; Charset=windows-1251\r\n");

echo "<html><head>
<meta http-equiv='Refresh' content='0; URL=view_post.php?id=$id'>
</head></html>";
exit();


}
else 
{
exit ("<p>Вы ввели неверную сумму цифр с картинки на предыдущей странице. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");
}


}

?>
в mysql я так понял надо проиндексировать всю колонку, делал в phpmyadmin и так же работаю с бд в navicat'e 9ом (там в закладке indexex добавляю колонку text + fulltext) и ни чего не получаеться, поиск выдает что ничего не найдено! вообщем что я не правильно делаю? особенно интересует какое значение должна принимать колонка text ? делал varchar не помогло, сейчас стоит text..
пишет, что: Информация по Вашему запросу на блоге не найдена. хотя я вообще слова, которые есть в колонке текст..
а если без индексирования пишет естественно:Код ошибки: Can't find FULLTEXT index matching the column list
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Что-то я не нашел в этом коде ПОИСК по сайту, здесь у Вас добавление комментариев (занесение их в бд) и отправка на эмал письма о том, что появился новый коммент.
Вот так будет выглядеть пожалуй лучше:
Код:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<?php  include ("blocks/bd.php");
$author = trim(htmlspecialchars(stripslashes($_POST['author'])));
$text = trim(htmlspecialchars(stripslashes($_POST['text'])));
$pr = intval($_POST['pr']);
$sub_com = $_POST['sub_com'];
$id = intval($_POST['id']);
if (isset($sub_com && !empty($author) && !empty($text)){
$result = mysql_query ("SELECT sum FROM comments_setting,$db");
$myrow = mysql_fetch_array($result);
if ($pr == $myrow["sum"]){
$date = date("Y-m-d H:i");
$result2 = mysql_query ("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author','$text'
,'$date')",$db);
$address = "gordonqq@yandex.ru";
$subject = "Новый комментарий на блоге";
$result3 = mysql_query ("SELECT title FROM data WHERE id='$id',$db");
$myrow3 = mysql_fetch_array ($result3);
$post_title = $myrow3["title"];
$message = "Появился комментарий к заметке - ".$post_title."\nКомментарий добавил(а): ".$author."\nТекст комментария: ".$text."\nСсылка на заметку: http://localhost/phpsite/view_post.php?id=".$id.
"";
mail($address,$subject,$message,"Content-
type:text/plain; Charset=windows-1251\r\n");

echo "<html><head>
<meta http-equiv='Refresh' content='0; URL=view_post.php?id=$id'>
</head></html>";
exit();
}
else{
exit ("<p>Вы ввели неверную сумму цифр с картинки на предыдущей странице. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");}
}
else{exit ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");}

?>
Скажу сразу, что не тестил его..
А поиск надо делать вот так:
Код:
echo 'Слово для поиска:<br><form action="'.$_SERVER['REQUEST_URI'].'" method="POST"><input type="text" size="25"  maxlength="45" name="slovo"><input type="submit" name="poisk" value="Найти"></form>';
if(isset($_POST['poisk'])){
$_slovo=preg_replace("/[^а-яА-Яa-zA-Z0-9\s]/",'',$_POST['slovo']);
$_cikl = mysql_query("SELECT * FROM `comments` WHERE (`author` LIKE '%$_slovo%') OR (`text` LIKE '%$_slovo%')");
if(mysql_num_rows($_cikl)>0) {
while($_cikl2 = mysql_fetch_array($_cikl)){
echo 'Автор: '.$_cikl2['author'].'<br>Текст: '.$_cikl2['text'];
}
}
else{echo 'Ничего не найдено!';}
}
Коммент к строке:
$_cikl = mysql_query("SELECT * FROM `comments` WHERE (`author` LIKE '%$_slovo%') OR (`text` LIKE '%$_slovo%')");
Строка означает:
Прошу вывести мне из таблицы "comments" все строки, где столбец "author" или столбец "text" содержит символы, которые находятся в переменной "$_slovo"
Вместо comments - можно поставить название таблицы, в которой будем искать.
Вместо author и text - ставятся названия столбцов в таблице, которой будем искать.
Знак "процент" убирать не нужно, они должны остаться.
 

zeromind

Новичок
Регистрация
14.04.2011
Сообщения
3
сорри косяк, не тот код скопирывал, вот правильный)
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<? include ("blocks/bd.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>");
}




?>
<title><? echo "Заметки по запросу - $search "; ?></title>
<link rel="stylesheet" type="text/css" href="mysite.css" />
</head>

 

 <body>
 <div id="container">
   <div id="header">
<?php include("blocks/header.php");
?>
 </div>

    <div id="sidebars">
<?php include("blocks/sidebars.php");
?>
</div>
   <div id="content">

<? 
  
        $result = mysql_query("SELECT id,title,description,date,author,mini_img,view FROM data WHERE MATCH(text) AGAINST('$search')",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@ruseller.com. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result); 

do 
{
printf ("<table align='center' class='post'>
     
	 
	 
	  <tr>
         <td class='post_title'>
		 <p class='post_name'><img class='mini' align='left' src='%s'><a href='view_post.php?id=%s'>%s</a></p>
		 <p class='post_adds'>Дата добавления: %s</p>
		 <p class='post_adds'>Добавил: %s</p></td>
         </tr>
         
		 <tr>
         <td><p>%s</p><p class='post_view'>Просмотров: %s &nbsp;&nbsp; Рейтинг: <img src='img/%s.gif'></p></td>
         </tr>
         
		 </table><br><br>",$myrow["mini_img"],$myrow["id"],$myrow["title"], $myrow["date"],$myrow["author"],$myrow["description"], $myrow["view"], $r);
   
}

while ($myrow = mysql_fetch_array($result));



}

else
{
echo "<p>Информация по Вашему запросу на блоге не найдена.</p>";
exit();
}

?>
    <hr/>
   <h6><A href="javascript:history.back()" onMouseOver="window.status='Back';return true">Вернуться назад <img class border="none" src="img/back.png" width="32" height="32" /></A></h6> 
      </h6>
   </div>

   <div id="footer">
<?php include("blocks/footer.php");
?>
 </div>
 </div> 
</body>
</html>
вывод результата поиска на новую страницу, ваш поиск работает, только ищет на месте, щяс попробую переделать..
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Тут кнопка будет отдельно от результата запроса:
Код:
if(isset($_POST['poisk'])){
$_slovo=preg_replace("/[^а-яА-Яa-zA-Z0-9\s]/",'',$_POST['slovo']);
$_cikl = mysql_query("SELECT * FROM `comments` WHERE (`author` LIKE '%$_slovo%') OR (`text` LIKE '%$_slovo%')");
if(mysql_num_rows($_cikl)>0) {
while($_cikl2 = mysql_fetch_array($_cikl)){
echo 'Автор: '.$_cikl2['author'].'<br>Текст: '.$_cikl2['text'];
}
}
else{echo 'Ничего не найдено!';}
}
else{echo 'Слово для поиска:<br><form action="'.$_SERVER['REQUEST_URI'].'" method="POST"><input type="text" size="25"  maxlength="45" name="slovo"><input type="submit" name="poisk" value="Найти"></form>';}
А тут методом GET передаются параметры, т.е ссылочку на эту страницу можно будет копировать.
Код:
if(isset($_GET['slovo']) && $_GET['slovo'] !==''){
$_slovo=preg_replace("/[^а-яА-Яa-zA-Z0-9\s]/",'',$_GET['slovo']);
$_cikl = mysql_query("SELECT * FROM `comments` WHERE (`author` LIKE '%$_slovo%') OR (`text` LIKE '%$_slovo%')");
if(mysql_num_rows($_cikl)>0) {
while($_cikl2 = mysql_fetch_array($_cikl)){
echo 'Автор: '.$_cikl2['author'].'<br>Текст: '.$_cikl2['text'];
}
}
else{echo 'Ничего не найдено!';}
}
else{echo 'Слово для поиска:<br><form action="'.$_SERVER['PHP_SELF'].'" method="GET"><input type="text" size="25"  maxlength="45" name="slovo"><input type="submit"  value="Найти"></form>';}
 
Статус
Закрыто для дальнейших ответов.
Верх Низ