2014-02-21 162 views
0

我一直以來在幾年前如果搜索字符串包含

// get the q parameter from URL 
$q = $_REQUEST["q"]; 
$hint = ""; 
session_start(); 
require ('connect.php'); 
$get_qst = mysql_query("SELECT question FROM questions WHERE question LIKE '%$q%'") or die(mysql_error()); 
if (mysql_num_rows($get_qst) >= 1) { 
    while ($qst = mysql_fetch_array($get_qst)) { 
     $a[] = $qst['question']; 
    } 
} 
else { 
    $a[] = ""; 
} 
// Fill up array with names 

// lookup all hints from array if $q is different from "" 
if ($q !== "") { 
    $q = strtolower($q); 
    $len = strlen($q); 
    foreach ($a as $name) { 
     if (stristr($q, substr($name, 0, $len))) { 
      if ($hint === "") { 
       $hint = $name; 
      } 
      else { 
       $hint .= "<br /> $name"; 
      } 
     } 
    } 
} 
// Output "no suggestion" if no hint were found 
// or output the correct values 

echo $hint === "" ? 'No questions found, <a href="javascript:void(0);" id="btn_askqst" onclick="$(\'#qst\').val($(\'#search_qst\').val());">ask question?</a>' : $hint; 

什麼代碼所做的是一個輸入字段比較數據庫中的行使用這個小模板。問題是,例如,如果我在數據庫中有一個問題,說「你喜歡PHP還是ASP?」有人搜索「PHP或ASP?」它會說沒有問題。這是因爲它不檢查單個單詞,它只檢查句子的開始。所以對於我來說,我需要按照正確的順序編寫每一個單詞,儘管我不需要寫出整個問題。

我該如何檢測該單詞是否在問題中呢?

我很抱歉不好解釋。英語不是我的第一語言,我真的不知道如何解釋這一點。

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**粉紅色框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – h2ooooooo

回答

0

首先,你需要把輸入字符串的空格:

$q = "PHP or ASP"; 
$terms = explode(" ", $q); 

然後,你需要爲每個詞進行搜索查詢。

foreach ($terms as $term) { 
    $get_qst = mysql_query("SELECT question FROM questions WHERE question LIKE '%$term%'") or die(mysql_error()); 
    if (mysql_num_rows($get_qst) >= 1) { 
     while ($qst = mysql_fetch_array($get_qst)) { 
      $a[] = $qst['question']; 
     } 
    } 
    else { 
     $a[] = ""; 
    } 
} 

最後,這很重要,重新編寫代碼以停止使用mysql_函數。請參閱上面的註釋@ h2ooooooo

相關問題