2014-01-08 129 views
0

我有一個HTML輸入字段,其中的值由字符串中的每個空格進行分解和分隔。然後該字符串搜索數據庫中的匹配項,如果匹配則返回值,但是我想從原始字符串中搜索一個表中的多個字段。PHP關鍵字搜索多個字段填充新輸入

希望這將澄清一些事情:

對於如果用戶搜索例如「謝爾頓男孩跳線」我想數據庫來搜索匹配形成每個關鍵字的數據庫中的每個字段例如[school_name],[性別],[product_type]。目前我有一個領域的工作,但我想返回並收集所有三個領域的價值觀。

這是我的代碼:

if (empty($_POST) === false) { 
    if(empty($_POST['title']) === true) { 
    $no_data = '<div class="alert alert-danger center">Please enter a title</div>'; 
    } else {   
     $item_title = $_POST['title']; 
     $keywords = explode(" ", $item_title); 


     $query = "SELECT * FROM products WHERE "; 
     foreach($keywords as $keyword) { 
      $i++; // dump variable 

      if($i == 1) { $query .= "product LIKE '$keyword' "; } 
        else { $query .= "OR product LIKE '$keyword' "; } 
     } 
     $query = mysql_query($query); 
     $numrows = mysql_num_rows($query); 


     $row = mysql_fetch_assoc($query); 
     echo $row['product']; 
    } 
} 
+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)。 **你也開放[SQL注入](http://stackoverflow.com/q/60174)** –

+0

你有什麼嘗試? (比搜索一個字段的工作代碼更多) –

+0

感謝John的有用評論,我沒有意識到這一點! – user3170837

回答

0

你真的想使用PDO的安全和方便是。無論如何,你仍然需要準備一份聲明。

$fields = array('fields','you','want','to','search'); 
foreach($keywords as $keyword) { 
    foreach ($fields as $field) { 
    $i++; // dump variable 
    if($i == 1) { 
     $query .= "$field LIKE '$keyword' "; 
    } else { 
     $query .= "OR $field LIKE '$keyword' "; 
    } 
} 

$ i == 1虛弱無誤。您可以設置$ i = false,然後如果($ i === true),則必須爲每個循環增加變量。或者,在每行的末尾都有OR,而不是最後一個查詢字符串的開始和OR的最後一個實例。這也從每個循環中刪除了if。

$fields = array('fields','you','want','to','search'); 
foreach($keywords as $keyword) { 
    foreach ($fields as $field) { 
     $query .= "$field LIKE '$keyword' OR "; 
    } 
} 
$query = substr($query, 0, strlen($query) - 4);