|
|
|
|
|
для: Vados
(28.06.2006 в 12:57)
| | Я тоже возился с этим листингом, потом взял да сделал так
<?
// Устанавливаем соединение с базой данных
require_once("../admin/config.php");
$title="Поиск";
$id_menu = 9;
include "../util/top.php";
// Режим поиска
define('ARTILES','1'); // В статьях
define('CATALOG','2'); // В КАТАЛОГЕ
define('NEWS','3'); // В NEWS
// Устанавливаем переменные формы
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
$name = $_POST['name'];
$srchwhere = $_POST['srchwhere'];
?>
<p><font size="+1" color="#6699CC">Поиск на сайте</font></p>
<table width="500" border="0" cellpadding="5" cellspacing="0">
<form action=search.php method=post>
<tr>
<td>Ключевые слова</td>
<td><input class="input" type=text name=name value='<?php echo $name; ?>' size="35"></td>
</tr>
<tr>
<td>Искать в</td>
<td>
<select type=text name=srchwhere>
<option value="">Выбор зоны поиска
<option value=
<?php
echo ARTILES;
?>>в статьях
<option value=
<?php
echo CATALOG;
?>>в каталоге
<option value=
<?php
echo NEWS;
?>>в новостях
</select>
</td>
</tr>
<tr><td> </td><td><input class="vvod" type=submit name=send value=Поиск></td></tr>
<input type="hidden" name="scr" value="1"></form>
</table>
<?php
if(isset($_POST['scr']))
{
if(empty($name))
{
echo "<DL><DT>Не введено искомое слово
<DD>Введите поисковое слово и повторите поиск.</DL>";
include "../util/bottom.php";
exit();
}
if(empty($srchwhere))
{
echo "<DL><DT>Не выбрана зона поиска
<DD>Выберите зону поиска и повторите поиск.</DL>";
include "../util/bottom.php";
exit();
}
$name = trim($name);
// В зависимости от режима поиска формируем SQL-запрос
switch($srchwhere)
{
case ARTILES: // Поиск в названиях статей
{
// Формируем SQL-запрос
$query = "select articles.id_article AS id_article,
articles.name AS name,
paragraphes.name AS text,
paragraphes.id_article
from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND MATCH(paragraphes.name) AGAINST('$name*' IN BOOLEAN MODE)
GROUP BY articles.id_article";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD>в разделе <b>статьи</b> число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=../article/index.php?id_article=".$posts['id_article'].">".$posts['name']."</a><br>";
?>
<DD>Коротко:<br>...<?= strtok (stristr($posts['text'], $_POST['name']),'.');?><br>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
include "../util/bottom.php";
exit();
}}
break;
}
case CATALOG: // Полнотекстовый поиск по каталогу
{
// Формируем SQL-запрос
$query = "SELECT * FROM links WHERE MATCH(name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
UNION SELECT * FROM links WHERE MATCH(description) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
UNION SELECT * FROM links WHERE MATCH(descr) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD>в разделе <b>каталог</b>число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=../mag/index.php?pid=".$posts['p_id'].">".$posts['name']."</a><br>";
?>
<DD>Коротко:<br>...<?= $posts['description'];?>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
include "../util/bottom.php";
exit();
}
}
break;
}
case NEWS: // Полнотекстовый поиск по новостям
{
// Формируем SQL-запрос
$query = "SELECT * FROM news WHERE MATCH(name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
UNION SELECT * FROM news WHERE MATCH(body ) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD>в разделе <b>новости</b> число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=../news/index.php?id_news=".$posts['id_news'].">".$posts['name']."</a><br>";
?>
<DD>Коротко:<br>...<?= $posts['body'];?>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
include "../util/bottom.php";
exit();
}
}
break;
}
}
}
include "../util/bottom.php";
?>
|
| |
|
|
|
|
|
|
|
для: куч1963
(27.06.2006 в 00:01)
| | Привет!
Хорошо, а что если я уберу вообще в запросе id_forum?
Но тогда у меня при поиске ругается на:
$numtot = mysql_num_rows($src);
То есть в строке браузера выдвётся такая ошибка:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\www\html\search\searchform2.php on line 89
По запросу ничего не найдено.
Помогите, уже сколько мучаюсь ничего не могу сделать! | |
|
|
|
|
|
|
|
для: Vados
(26.06.2006 в 22:03)
| | в таблице articles нет столба id_forum | |
|
|
|
|
|
|
|
для: valenok
(26.06.2006 в 18:54)
| | Спасибо!
Но что-то у меня совсем ничего не получается, итак, для ясности, что я сделал:
case TITLES: // Поиск в названиях статей
{
// Формируем SQL-запрос
$query = "SELECT * FROM articles WHERE $search AND id_forum = $id_forum AND hide = 'show' $pagetmp ORDER BY time DESC LIMIT $numberthemes";
$src = mysql_query($query);
if(!$src) exit(mysql_error()."<br>".$query);
break;
}
|
case ARTICLES: // Полнотекстовый поиск по сообщениям
{
// Формируем SQL-запрос
$query = "SELECT id_article FROM paragraphes WHERE $search AND hide = 'show' $pagetmp GROUP BY id_article";
$par = mysql_query($query);
if(!$src) exit(mysql_error()."<br>".$query);
if ($par) puterror("Ошибка при выборе параграфов...");
$numtot = mysql_num_rows($par);
if ($numtot>0)
{
$query = "SELECT * FROM articles WHERE id_article IN (";
while ($art = mysql_fetch_array($par))
{
$query .= $art['id_article'].",";
}
$query .= "0) AND id_forum=$id_forum AND hide = 'show' GROUP BY id_theme ORDER BY time DESC LIMIT $numberthemes";
$src = mysql_query($query);
if(!$src) exit(mysql_error()."<br>".$query);
}
else echo "По запросу ничего не найдено.";
break;
}
|
Вот, то есть получается, что я это ввёл в 3-х местах.
Но у меня при попытке найти искомое слово, вот такая вещь возращается:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND hide = 'show' ORDER BY time DESC LIMIT 1' at line 1
SELECT * FROM articles WHERE MATCH (name) AGAINST ('Привет') AND id_forum = AND hide = 'show' ORDER BY time DESC LIMIT 1
Прошу, помогите мне.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Vados
(26.06.2006 в 18:04)
| | >Хорошо, спасибо!
>Но я не пойму куда мне этот код дописывать, точнее после
<?php
case TITLES: // Поиск в названиях статей
{
// Формируем SQL-запрос
$query = "SELECT * FROM articles WHERE $search AND id_forum = $id_forum AND hide = 'show' $pagetmp ORDER BY time DESC LIMIT $numberthemes";
$src = mysql_query($query);
if(!$src) exit(mysql_error()."<br>".$query);
break;
}
?>
|
И так следует обработать каждую функцию mysql_query(). | |
|
|
|
|
|
|
|
для: Vados
(26.06.2006 в 18:53)
| | Без.
Покажите лучше как вы вставили.. | |
|
|
|
|
|
|
|
для: valenok
(26.06.2006 в 18:11)
| | Привет!
Спасибо конечно за совет, но у меня ничего не получается.
Я
<?php
if(!$src) exit(mysql_error()."<br>".$query);
?>
|
поставил, но я так понимаю, что необходимо вставить код без <?php и ?>
Заранее спасибо за помощь. | |
|
|
|
|
|
|
|
для: cheops
(26.06.2006 в 11:01)
| |
<?php
if(!$src) exit(mysql_error()."<br>".$query);
?>
|
Только при отладке.
А так лучше:
<?php
if(!$src) exit(Извините, произошла ошибка. Просим вас связаться с администратором.);
?> | |
|
|
|
|
|
|
|
для: Vados
(26.06.2006 в 18:04)
| | После исполнения запроса
$src = mysql_query($query);
В
switch ($srchwhere)
{
case TITLES: // Поиск в названиях статей
{ | |
|
|
|
|
|
|
|
для: cheops
(26.06.2006 в 11:01)
| | Хорошо, спасибо!
Но я не пойму куда мне этот код дописывать, точнее после чего?
Заранее спасибо! | |
|
|
|
|