Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум веб-мастеров _ Базы данных (MySQL, PostgreSQL, ODBC, ...) _ почему не работает скрипт

Автор: 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;
}

Invision Power Board ()
© Invision Power Services ()