Помогите написать скрипт поиска. вот наработки. Но со страницами проблема, все время показывает 20 страниц. Хоть 2 результата, но 20 страниц... и надо сделать чтобы искал по нескольким словам, а не по точной фразе...
$kolvo="10";
if($_GET['page']==0) {$page=1;} else { $page=$_GET['page']; }
$pages=($page*$kolvo-$kolvo);
$page = htmlspecialchars(mysql_real_escape_string(intval($page)));
$counter = mysql_numrows(mysql_query("SELECT * FROM `search` WHERE `text` LIKE '%".$_POST['searchq']."%'"));
$total = intval(($counter - 1) / $kolvo)+1;
$st = mysql_query("SELECT * FROM `search` WHERE `text` LIKE '%".$_POST['searchq']."%' ORDER by `id` DESC LIMIT $pages, $kolvo");
if(mysql_num_rows($st)==0)
{ echo '<div class="contur"><div class="header">Ошибка!</div></div>';
exit;
}
{$i=1;
echo '<div class="contur"><div class="header">';
while($stat = mysql_fetch_array($st)){
$tekst=substr($stat[text],0,500);
$urls=substr($stat[url],0,29);
echo"<img src='images/zip.png'> <a href=".$stat['url']."><b>".$stat['name']."</b></a><br>".$tekst."<br><font color=green>".$urls."...</font><br>";
$i++;}
}
echo "</div></div>";
echo '<div class="contur"><div class="nav">';
$strr=($str-1);
// Проверяем нужны ли стрелки назад
if ($page > 3 ) {if ($page != 1) $pervpage = '<a href=?page=1>1</a> '; }
// Проверяем нужны ли стрелки вперед
if($page+2!=$total) if($page+1!=$total) if ($total > 3 ) { if ($page != $total) { $nextpage = '<a href=?page=' .$total. '>' .$total. '</a>'; } }
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href=?page='. ($page - 2) .'>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '<a href=?page='. ($page - 1) .'>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = ' <a href=?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' <a href=?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<span class="navcurrent">'.$page.'</span>'.$page1right.$page2right.$nextpage;
echo "</div></div>";
я знаю что дырявые, я пока наброски делаю
добавлено спустя 27 секунд:
о безопасности потом подумаю.
rimmus, а я не виноват в этом
sadiev, потом уже нефига не найдешь что и где
sadiev, а зачем придумали google.ru google.com google.ua google.kz ya.ru itd там ищи найдеш похожий ск, и посматри код
16 Мар 2011, 23:18Афтар в этом разделе выкладывали 2 поисковика(скрипта),allhave и еще какой то. Вот в них глянь
17 Мар 2011, 0:00Мне нужен поисковик именно по базе.
добавлено спустя 5 минут:
Помогите сделать чтобы поиск совершался по нескольким колонкам... вот доработал код.
echo '
<form name="searchForm" method="get" action="?">
<input name="searchq" type="text" id="searchq" size="30" value="'.$_GET['searchq'].'" />
<input type="submit" name="submitSearch" id="submitSearch" value="Искать" />
</form><br>';
$search=$_GET['searchq'];
$search= htmlspecialchars(addslashes(trim(chop($search))));
/////////////////////
$keys = explode(" ", $search);
$key = ('`text` LIKE \'%' .implode('%\' AND `text` LIKE \'%', $keys). '%\'');
$trans = array("а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e", "ё"=>"yo","ж"=>"j","з"=>"z","и"=>"i","й"=>"i","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t", "у"=>"y","ф"=>"f","х"=>"h","ц"=>"c","ч"=>"ch", "ш"=>"sh","щ"=>"sh","ы"=>"i","э"=>"e","ю"=>"u","я"=>"ya",
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E", "Ё"=>"Yo","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"I","К"=>"K", "Л"=>"L","М"=>"M","Н"=>"N","О"=>"O","П"=>"P", "Р"=>"R","С"=>"S","Т"=>"T","У"=>"Y","Ф"=>"F", "Х"=>"H","Ц"=>"C","Ч"=>"Ch","Ш"=>"Sh","Щ"=>"Sh", "Ы"=>"I","Э"=>"E","Ю"=>"U","Я"=>"Ya",
"ь"=>"","Ь"=>"","ъ"=>"","Ъ"=>"");
$key2 = strtr($search, $trans);
$keys1 = explode(" ", $key2);
$key1 = ('<br>`name` LIKE \'%' .implode('%\' AND `name` LIKE \'%', $keys1). '%\'');
echo "<br>SELECT * FROM `search` WHERE ".$key." or ".$key1." ORDER by `id` DESC LIMIT ".$pages.", ".$kolvo."";
////////////////////
$kolvo="10";
if($_GET['page']==0) {$page=1;} else { $page=$_GET['page']; }
$pages=($page*$kolvo-$kolvo);
$page = htmlspecialchars(mysql_real_escape_string(intval($page)));
$counter = mysql_numrows(mysql_query("SELECT * FROM `search` WHERE $key"));
$total = intval(($counter - 1) / $kolvo)+1;
//$st = mysql_query("SELECT * FROM `search` WHERE $key AND $key1 ORDER by `id` DESC LIMIT $pages, $kolvo");
$st = mysql_query("SELECT * FROM `search` WHERE `text` LIKE '%чат%' and `name` LIKE '%chat%' ORDER by `id` DESC LIMIT $pages, $kolvo");
if(mysql_num_rows($st)==0)
{ echo '<div class="contur"><div class="header">Ничего не найдено. Уточните запрос.</div></div>';
include_once '../sys/inc/tfoot.php';
exit;
}
{$i=1;
echo '<div class="contur"><div class="header">';
while($stat = mysql_fetch_array($st)){
$tekst=substr($stat[text],0,500);
$urls=substr($stat[url],0,29);
echo"<img src='images/zip.png'> <a href=".$stat['url']."><b>".$stat['name']."</b></a><br>".$tekst."<br><font color=green>".$urls."...</font><br>";
$i++;}
}
echo "</div></div>";
echo '<div class="contur"><div class="nav">';
$strr=($str-1);
// Проверяем нужны ли стрелки назад
if ($page > 3 ) {if ($page != 1) $pervpage = '<a href=?page=1>1</a> '; }
// Проверяем нужны ли стрелки вперед
if($page+2!=$total) if($page+1!=$total) if ($total > 3 ) { if ($page != $total) { $nextpage = '<a href=?page=' .$total. '>' .$total. '</a>'; } }
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href=?searchq='.$_GET['searchq'].'&page='. ($page - 2) .'>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '<a href=?searchq='.$_GET['searchq'].'&page='. ($page - 1) .'>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = ' <a href=?searchq='.$_GET['searchq'].'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' <a href=?searchq='.$_GET['searchq'].'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<span class="navcurrent">'.$page.'</span>'.$page1right.$page2right.$nextpage;
echo "</div></div>";