作者 主題: [問題]關於寫搜尋引擎的問題請教  (閱讀 5486 次)

0 會員 與 1 訪客 正在閱讀本文。

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 於: 2004-06-10 20:56 »
請問各位學長 . 小弟最近有個問題頗困擾 . 所以發文請教各位學長^^
這是目前我研究的搜尋引擎 . 請學長幫我真錯看看有何問題 !
程式如下 :
代碼: [選擇]
<?
$link = mysql_connect($DB_SERVER,$DB_USER,$DB_PASS);
mysql_select_db($DB_NAME,$link);

if ($srch_word){    //判斷是否有輸入文字
   
    if($srch_kind=="0"){ //檢查搜尋的種類 ..$srch_kind
      $str="SELECT * FROM forum_topic WHERE topic_title like '%$srch_word%' or content like '%$srch_word%' or name like '%$srch_word%' order by time desc";
    }elseif($srch_kind=="1"){
      $str="SELECT * FROM SELECT * FROM forum_post WHERE topic_title like where topic_title like '%$srch_word%' order by time desc";
   }elseif($srch_kind=="2"){
      $str="SELECT * FROM forum_topic WHERE topic_title like where topic_poster like '%$srch_word%' order by time desc";
   }
   
    $list = mysql_query($str,$link); //$list 來接收 執行此動作傳回的編號

    if ( mysql_num_rows($list) != 0 ){  //如果$list有傳回資料
       echo '<div align="center">
        <table border="0" width="70%" cellspacing="1" cellpadding="4" bgcolor="#8080FF">
        <tr bgcolor="#208030" style="color:white">
              <td width="20%">發表時間</td>
              <td width="50%">討論主題</td>
              <td width="20%">發表人</td>
             <td width="10%">點閱率</td>
        </tr>';

        while(list($topic_id,$topic_title,$topic_poster,$topic_time,$topic_views,$topic_replies,$topic_last_post_id) = mysql_fetch_row($list)){ //將$list 傳回的資料陣列依照陣列依序放進前面那些變數
       
           if(strlen($title)>40){ //當標題超過40字元時,只取40字元,其餘以......代替
              $title=substr($title,0,40)."...";
           }

            //開/關 Html 語法
           if($close_html){
                $topic_title=htmlspecialchars($topic_title);
                $topic_poster=htmlspecialchars($topic_poster);
                $topic_email=htmlspecialchars($topic_email);
           }

           echo "<tr bgcolor=\"#FFFFFF\"><td>$topic_time</td><td><a href = \"forum_viewtopic.php?id=$id\">$title</a></td><td><a href = \"mailto:$email\">$poster</a></td><td>$counter</td></tr>";
        }

    }else{ //找不到符合資料
        echo "<center>";
       echo "找不到您所搜尋的資料!";
    }

}else{
   echo "您沒有輸入任何關鍵字,請重新輸入!";
}

//mysql_close($link);
?>


目前我先介紹一下我目前的欄位設定 :
代碼: [選擇]
CREATE TABLE `forum_post` (
  `post_id` int(10) NOT NULL auto_increment,
  `topic_id` int(10) NOT NULL default '0',
  `poster` varchar(50) NOT NULL default '',
  `post_time` varchar(20) default NULL,
  `email` varchar(75) NOT NULL default '',
  `web` varchar(75) NOT NULL default '',
  PRIMARY KEY  (`post_id`),
  KEY `post_id` (`post_id`),
  KEY `topic_id` (`topic_id`),
  KEY `poster_id` (`poster`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;


代碼: [選擇]
CREATE TABLE `forum_topic` (
  `topic_id` int(10) NOT NULL auto_increment,
  `topic_title` varchar(100) default NULL,
  `topic_poster` varchar(50) NOT NULL default '',
  `topic_time` varchar(20) default NULL,
  `topic_views` int(10) NOT NULL default '0',
  `topic_replies` int(10) NOT NULL default '0',
  `topic_last_post_id` int(10) NOT NULL default '0',
  PRIMARY KEY  (`topic_id`),
  KEY `topic_id` (`topic_id`),
  KEY `topic_last_post_id` (`topic_last_post_id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;


主要是這兩個欄位 . 但是目前讀取好像有問題 . 請參考這裡 :
http://3cbuy.com/shop/forum_search.php

只要點選種類搜尋就會出現錯誤 !
錯誤行數是這段 :
代碼: [選擇]
while(list($topic_id,$topic_title,$topic_poster,$topic_time,$topic_views,$topic_replies,$topic_last_post_id) = mysql_fetch_row($list)){

但是請恕小弟笨拙 . 看不出問題出現在何方 ..
請各位學長指點指教^^||

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[問題]關於寫搜尋引擎的問題請教
« 回覆 #1 於: 2004-06-10 23:22 »
大概瞄了一下...

代碼: [選擇]
SELECT * FROM forum_topic WHERE topic_title like where topic_poster like '%$srch_word%' order by time desc";

這段sql語法有問題吧?

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 回覆 #2 於: 2004-06-11 00:17 »
引述: "willie0220"
大概瞄了一下...

代碼: [選擇]
SELECT * FROM forum_topic WHERE topic_title like where topic_poster like '%$srch_word%' order by time desc";

這段sql語法有問題吧?

學長你好^^
感謝你的回答 . 請問能大略說一下錯誤在何處嗎 ?
因為我之前也有調整過改為 :
代碼: [選擇]
SELECT topic_id,topic_title,topic_poster,topic_time,topic_views,topic_replies,topic_last_post_id FROM forum_topic WHERE topic_title like where topic_poster like '%$srch_word%' order by time desc";
但是還是發生錯誤 ...

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[問題]關於寫搜尋引擎的問題請教
« 回覆 #3 於: 2004-06-11 01:52 »
代碼: [選擇]
SELECT * FROM forum_topic [color=red]WHERE[/color] topic_title like [color=red]where[/color] topic_poster like '%$srch_word%' order by time desc";

兩個where子句?語法錯了吧 :)

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 回覆 #4 於: 2004-06-11 11:06 »
我做了變更 . 但是讀取還是出現錯誤 :
代碼: [選擇]
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/lineii/public_html/shop/forum_search.php on line 123

找不到您所搜尋的資料!


這個行數就是這段 :
代碼: [選擇]
   if ( mysql_num_rows($list) != 0 ){  //如果$list有傳回資料

那也就是表示 $list 沒有傳回資料嗎 ?

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[問題]關於寫搜尋引擎的問題請教
« 回覆 #5 於: 2004-06-11 11:44 »
建議你

習慣在程式中安插偵錯程式碼

這樣的話,你要除錯比較方便 :)

比方:
$list = mysql_query($str,$link);

我會這樣寫:
$list = mysql_query($str,$link) or die('query error!!'.mysql_error());

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 回覆 #6 於: 2004-06-11 23:08 »
引述: "willie0220"
建議你

習慣在程式中安插偵錯程式碼

這樣的話,你要除錯比較方便 :)

比方:
$list = mysql_query($str,$link);

我會這樣寫:
$list = mysql_query($str,$link) or die('query error!!'.mysql_error());

感謝學長讓我上了一課 . 我測試看看再來請教^^

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 回覆 #7 於: 2004-06-13 00:18 »
還是失敗了 ...
有熱心的學長可以幫我看看嗎 ?

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[問題]關於寫搜尋引擎的問題請教
« 回覆 #8 於: 2004-06-13 02:10 »
把你修改過後的程式碼丟上來看看?

吉川拓也

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
    • http://gamania.idv.tw
[問題]關於寫搜尋引擎的問題請教
« 回覆 #9 於: 2004-06-13 13:45 »
引述: "willie0220"
把你修改過後的程式碼丟上來看看?

感謝學長熱心協助^^||
這是我整個 forum_search.php 檔案 :

代碼: [選擇]
<?php
  
require&#40;'includes/application_top.php'&#41;;
  
$breadcrumb->add&#40;文章搜尋, tep_href_link&#40;'forum_search.php', '', 'NONSSL'&#41;&#41;;
?>



<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS?>>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET?>">
<?php
// Header Tag Controller v1.0
// Replaced by header_tags.php
if &#40; file_exists&#40;DIR_WS_INCLUDES . 'header_tags.php'&#41; &#41; {
  
require&#40;DIR_WS_INCLUDES . 'header_tags.php'&#41;;
} else {
?>

  <title><?php echo TITLE ?></title>
<?php
}
// EOF&#58; Header Tag Controller v1.0
?>

<META NAME="Author" CONTENT="www.lxfx.com">
<meta name="robots" content="index, follow">
<meta name="revisit-after" content="7 days">
<base href="<?php echo &#40;getenv&#40;'HTTPS'&#41; == 'on' ? HTTPS_SERVER &#58; HTTP_SERVER&#41; . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require&#40;DIR_WS_INCLUDES . 'header.php'&#41;; ?>
<!-- header_eof //-->

<!-- body //-->
<?php print&#40;$test&#41;; ?>
<table border="0" width="100%" cellspacing="3" cellpadding="3">
  <tr>
    <td width="<?php echo BOX_WIDTH?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require&#40;DIR_WS_INCLUDES . 'column_left.php'&#41;; ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top">
<table width="100%" cellspacing="0" cellpadding="2">
 <tr>
 <td valign="top">
   <table border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
       <td class="infoBoxHeading" height="14"><img height="14" alt="" src="images/infobox/corner_left.gif" width="11" border="0">    討論區</td>
  </tr>
   </table>
   <table border="0" width="100%" cellspacing="0" cellpadding="1" class="infoBox">
  <tr>
    <td align="center">
<table border="0" width="100%" cellspacing="0" cellpadding="4" class="infoBoxContents">
  <tr>
<td>  </td>
    <td><br><br>

<?php



include&#40;"forum_config.php"&#41;;
include&#40;"forum_lib.php"&#41;;
?>


<center>
  <table border="0" cellpadding="0" cellspacing="0" width="<?php echo $tablewidth?>">
     <tr><td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td>
              <table width="100%" border="0" cellspacing="0" cellpadding="1">
                <tr>
                  <td>
                    <table width="100%" border="0" cellspacing="0" cellpadding="3">
                      <tr>
                        <td align="left"><font face="<?php echo $default_font ?>" size="1">
                        <font face="<?php echo $default_font ?>" size="1">底下是你使用的關鍵字[<font color="blue"><?echo $srch_word;?></font>]搜尋的結果,請點選該主題 :</font> <br>
                        </td>
                      </tr>
                      <tr>
                        <td align="left"><font face="<?php echo $default_font ?>" size="1">
               <a href="forum.php"><font color="#006600" style="text-decoration:none;">回討論區</font></a> | <form action="forum_search.php" method="post"><input type="text" name="srch_word"><input type="submit" value="搜尋"></form>
                        </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </table>
<?php

$hasil 
mysql_query&#40;"SELECT * FROM forum_post"&#41;;
$total_post mysql_num_rows&#40;$hasil&#41; or die&#40;"目前沒有任何討論!"&#41;;

$hasil_topic mysql_query&#40;"SELECT * FROM forum_topic"&#41;;
$total_topic mysql_num_rows&#40;$hasil_topic&#41; or die&#40;"沒有任何主題紀錄!"&#41;;

?>

        </td>
        </tr>
        </table>
        <img height="4" src="images/space.gif" width=600><br>

<?
$link = mysql_connect($DB_SERVER,$DB_USER,$DB_PASS);
mysql_select_db($DB_NAME,$link);

if ($srch_word){    //判斷是否有輸入文字
   
    if($srch_kind=="0"){ //檢查搜尋的種類 ..$srch_kind
      $str="SELECT * FROM forum_topic WHERE topic_title like '%$srch_word%' or content like '%$srch_word%' or name like '%$srch_word%' order by time desc";
    }elseif($srch_kind=="1"){
      $str="SELECT * FROM SELECT * FROM forum_post WHERE topic_title like topic_title like '%$srch_word%' order by time desc";
   }elseif($srch_kind=="2"){
      $str="SELECT * FROM forum_topic WHERE topic_title like topic_poster like '%$srch_word%' order by time desc";
   }
   
    $list = mysql_query($str,$link) or die('query error!!'.mysql_error()); //$list 來接收 執行此動作傳回的編號

    if ( mysql_num_rows($list) != 0 ){  //如果$list有傳回資料
       echo '<div align="center">
        <table border="0" width="70%" cellspacing="1" cellpadding="4" bgcolor="#8080FF">
        <tr bgcolor="#208030" style="color:white">
              <td width="20%">發表時間</td>
              <td width="50%">討論主題</td>
              <td width="20%">發表人</td>
             <td width="10%">點閱率</td>
        </tr>';

        while(list($topic_id,$topic_title,$topic_poster,$topic_time,$topic_views,$topic_replies,$topic_last_post_id) = mysql_fetch_row($list)){ //將$list 傳回的資料陣列依照陣列依序放進前面那些變數
       
           if(strlen($topic_title)>40){ //當標題超過40字元時,只取40字元,其餘以......代替
              $topic_title=substr($topic_title,0,40)."...";
           }

            //開/關 Html 語法
           if($close_html){
                $topic_title=htmlspecialchars($topic_title);
                $topic_poster=htmlspecialchars($topic_poster);
                $topic_email=htmlspecialchars($topic_email);
           }

           echo "<tr bgcolor=\"#FFFFFF\"><td>$topic_time</td><td><a href = \"forum_viewtopic.php?id=$id\">$title</a></td><td><a href = \"mailto:$email\">$poster</a></td><td>$counter</td></tr>";
        }

    }else{ //找不到符合資料
        echo "<center>";
       echo "找不到您所搜尋的資料!";
    }

}else{
   echo "您沒有輸入任何關鍵字,請重新輸入!";
}

//mysql_close($link);
?>

</td></tr>
</table>

<br><br></td>
<td>  </td>
  </tr>
</table>
        </td>

     </tr>
   </table>
</td>
</tr>
</table>
</td>
<!-- body_text_eof //-->
    <td valign="top"></td>
  </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require&#40;DIR_WS_INCLUDES . 'footer.php'&#41;; ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require&#40;DIR_WS_INCLUDES . 'application_bottom.php'&#41;; ?>