Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поиск по сайту (2 часть)

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: куч1963   (28.06.2006 в 13:17)   письмо автору
 
   для: 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>&nbsp;</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";
?>

   
 
 автор: Vados   (28.06.2006 в 12:57)   письмо автору
 
   для: куч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
По запросу ничего не найдено.

Помогите, уже сколько мучаюсь ничего не могу сделать!

   
 
 автор: куч1963   (27.06.2006 в 00:01)   письмо автору
 
   для: Vados   (26.06.2006 в 22:03)
 

в таблице articles нет столба id_forum

   
 
 автор: Vados   (26.06.2006 в 22:03)   письмо автору
 
   для: 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


Прошу, помогите мне.

Заранее спасибо.

   
 
 автор: cheops   (26.06.2006 в 19:49)   письмо автору
 
   для: 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().

   
 
 автор: valenok   (26.06.2006 в 18:54)   письмо автору
 
   для: Vados   (26.06.2006 в 18:53)
 

Без.
Покажите лучше как вы вставили..

   
 
 автор: Vados   (26.06.2006 в 18:53)   письмо автору
 
   для: valenok   (26.06.2006 в 18:11)
 

Привет!
Спасибо конечно за совет, но у меня ничего не получается.

Я

<?php 
  
if(!$src) exit(mysql_error()."<br>".$query); 
?>


поставил, но я так понимаю, что необходимо вставить код без <?php и ?>

Заранее спасибо за помощь.

   
 
 автор: valenok   (26.06.2006 в 18:11)   письмо автору
 
   для: cheops   (26.06.2006 в 11:01)
 


<?php 
  
if(!$src) exit(mysql_error()."<br>".$query); 
?>

Только при отладке.
А так лучше:
<?php
if(!$src) exit(Извините, произошла ошибка. Просим вас связаться с администратором.);
?>

   
 
 автор: valenok   (26.06.2006 в 18:10)   письмо автору
 
   для: Vados   (26.06.2006 в 18:04)
 

После исполнения запроса
$src = mysql_query($query);
В
switch ($srchwhere)
{
case TITLES: // Поиск в названиях статей
{

   
 
 автор: Vados   (26.06.2006 в 18:04)   письмо автору
 
   для: cheops   (26.06.2006 в 11:01)
 

Хорошо, спасибо!
Но я не пойму куда мне этот код дописывать, точнее после чего?

Заранее спасибо!

   

Сообщения:  [1-10]    [11-20]  [21-23] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования