Автор: pershinoid 23.11.2007, 16:11
надо сделать поиск по базе с помощью пхп
выводится форма, пишется слово, которое надо найти. но посмле нажатия кнопки поиск опять открывается пустая форма поиск. результат не выводится. не понимаю почему
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
<table bgcolor="#ccccFF">
<tr>
<td>Найти</td>
<td align="center"><input type=text name="a" value="" size="50" maxlength="20"></td>
</tr>
<tr>
<td colspan="2" align="right"><input type=submit name="Go" value="поиск"></td>
</tr>
</table>
</form>
<?php
include "config.php";
function search($a)
{
$query = "SELECT * FROM glav
WHERE MATCH (name,text) AGAINST ('$a');";
$result = MYSQL_QUERY($query);
echo '<table border align="left" width="150">';
echo '<tr>';
echo "<th>название главы/раздела</th><th>текст</th>\n";
echo "</tr>\n";
while ($row = @mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "<tr>\n";
echo "<td>".$row["name"]."</td>";
echo "<td>".$row["text"]."</td>";
echo '</tr>';
}
echo'</table>';
}
?>
Автор: gid 23.11.2007, 16:24
Возможно в самой таблице у вас не установлен полнотекстовый поиск для нужного столбца(ов). Делается это через phpMyAdmin или sql запросом:
Код
ALTER TABLE `имя_таблицы` ADD FULLTEXT (
`поле1`, `поле2`
)
Автор: pershinoid 23.11.2007, 18:32
Цитата(gid @ 23.11.2007, 17:24)

Возможно в самой таблице у вас не установлен полнотекстовый поиск для нужного столбца(ов). Делается это через phpMyAdmin или sql запросом:
Код
ALTER TABLE `имя_таблицы` ADD FULLTEXT (
`поле1`, `поле2`
)
стоит fulltext и
в phpmyadmin запрос
SELECT * FROM glav
WHERE MATCH (name,text) AGAINST ('$a');
работает
Автор: pershinoid 23.11.2007, 18:33
проблема в том что на страницу результат не выводится
Автор: sashkovishe 23.11.2007, 22:23
Попробуйте убрать экранирование ошибок (@) в строке while ($row = @mysql_fetch_array($result, MYSQL_ASSOC)), посмотрите чего выдаст...
------------
может пригодиться... делал поиск для одной доски объявлений...
Код
<form action='index.php?page=search' method=POST name='search_form' OnSubmit='return check()'>
<input type='text' name='str_search' size=30 maxlength=50>
<input type='submit' name='go'>
if (@$go) {
$str_search=strip_tags($str_search);
$str_search=trim($str_search);
$numresults=mysql_query("SELECT * FROM $table WHERE text LIKE '%$str_search%'");
$rows=mysql_num_rows($numresults);
if (empty($p)) { $p=0; }
$limit=10;
$sql=mysql_query("SELECT * FROM $table WHERE text LIKE '%$str_search%' ORDER BY id DESC limit $p,$limit");
$row=mysql_num_rows($sql);
if($row==0){ echo "<hr><H3 align=center>По запросу \"$str_search\", поиск не дал результатов, или в этом разделе нет объявлений</H3>"; } else {
echo "<hr><div class=zagol align=center><b>Результаты поиска по запросу \"$str_search\"</b><p></div><table border=1 width=100% align=center cellpadding=1 cellspacing=0 bordercolor=#a8a8a8>
<tr align=center bgcolor=#e1e1e1><th width=15%>Дата</td><th width=25%>Раздел</td><th width=60%>Объявления</td></tr>";
for($i=0;$i<$row;$i++){
$str=mysql_fetch_array($sql);
echo "<tr><td width=15% align=center>".$str['date']."</td><td width=25% align=center>".$str['razdel']."</td><td width=60%>".nl2br(strip_tags($str['text']))."</td></tr>";
} echo "</table>";
}
p.s. код здесь не весь, а только основная часть, но думаю без труда можно переделать под себя...
Автор: pershinoid 25.11.2007, 0:26
спасибо! все работает
а как подсвечивать слова, которые искали?
Автор: gid 25.11.2007, 8:37
Делал для своих сайтов, немного коряво, но работает:
Код
function highlight_search_string($s_w, $text)
{
$search_arr = array_unique(Clear_array_empty(explode(" ", $s_w)));
$s_str_r = "'\,|\.|\;|\:|\"|\'|\(|\)|\#|\*|\@|\$|\&|\%|\^|\"|\-|\=|\+|\?|\>|\<|\/'";
foreach ($search_arr as $s_text)
{
$s_text = trim(@preg_replace ($s_str_r, " ", $s_text));
if (strlen($s_text)>2)
$text = @eregi_replace($s_text, "<font style=\"background-color:#ffe1e1\">\\0</font>", $text);
}
return $text;
}