2016-04-22 84 views
1

我有這樣的形式來獲取用戶輸入:包括<SELECT>在搜索領域的查詢

<form method="post" action="do_search.php"> 
    <select name="stat"> 
     <option value="-">No StatTrak</option> 
     <option value="ST">StatTrak</option> 
    </select> 
     <input type="text" name="search" id="search_box" class="search_box" placeholder="Bayonet/Blue Steel (Factory New)"></br> 
     <input type="submit" value="Find item!" class="search_button" /><br /> 
</form> 

的查詢工作,並搜索匹配第二列(ITEMNAME)。現在我想讓選擇框通過使用第一列過濾出結果。

第一列只包含「ST」或「 - 」。

這裏是我的查詢:

$search=$_POST['search']; 
$stat=$_POST['stat']; 
$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like ? ORDER BY itemprice DESC LIMIT 15"); 
$query->bindValue(1, "%$search%", PDO::PARAM_STR); 
$query->execute(); 

基本上,我需要這樣的東西:

...FROM pricedata where itemname LIKE $Searchbox AND itemstat LIKE $Selectbox... 

我新的PHP和我使用一些教程做此查詢。我理解它的大部分內容,但我不明白這些價值是如何「準備好」的。

這部分是很難理解我:

$query->bindValue(1, "%$search%", PDO::PARAM_STR); 

會是什麼使選擇框給查詢一個額外的變量正確的方法,所以它只能說明匹配的搜索框和有結果第一列中的「ST」或「 - 」。

在此先感謝,我感謝任何幫助! :)

編輯 - 這是我的數據庫的一部分: enter image description here


對於Dimlucas:

$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like ? AND itemstat=? ORDER BY itemprice DESC LIMIT 15"); 
$query->bindValue(1, "%$search%", PDO::PARAM_STR); 
$query->bindValue(2, $stat); 
$query->execute(); 

這個查詢(您發佈的第一個只是說「沒什麼發現「,但它會做正確的事情,如果它工作的話,因爲它包括用戶輸入(選擇框和搜索欄)

SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like 'Karambit' AND itemstat='ST' ORDER BY itemprice DESC LIMIT 15 

我用這個替換了第一個測試,如果有任何問題找到正確的匹配。它找到了正確的匹配,但是這個不包含任何佔位符或用戶輸入,所以我猜,在接受用戶輸入並將其提供給查詢使用之間存在一個問題。

現在我有這樣的查詢和打印出來的結果 - >http://pastebin.com/xMf4jCgH

我嘗試添加$搜索和$統計在面前的桌子上。它打印出搜索字符串,但不是「 - 」或「ST」,它是來自選擇框的輸入。所以問題是,用戶輸入甚至沒有達到查詢。

你有什麼想法嗎?

+0

井代碼'where itemname LIKE $搜索框和itemstat LIKE $選擇框'它看起來不錯。試驗是最好的學習方式 – RiggsFolly

+0

你可以編寫任意數量的'$ query-> bindValue()'so'$ query-> bindValue(2,「%$ select%」,PDO :: PARAM_STR);' – RiggsFolly

+0

謝謝! PDO :: PARAM_STR是做什麼的?該查詢如何知道,哪個數字是「?」。它是否按升序排列? bindvalue(1是否意味着它是查詢和綁定值中的第一個「?」(2是第二個? –

回答

0

你嘗試似乎是確定:

"...FROM pricedata WHERE itemname LIKE ".$Searchbox." AND itemstat LIKE ".$Selectbox.";" 
1

你可以閱讀預處理語句here。它們在防止SQL注入攻擊方面非常有用。

現在對於你想要達到的目標,我建議你修改查詢,像這樣:

$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like ? AND itemstat=? ORDER BY itemprice DESC LIMIT 15"); 
    $query->bindValue(1, "%$search%", PDO::PARAM_STR); 
    $query->bindValue(2, $stat); 
    $query->execute(); 

編輯:既然你說沒有必要的統計信息字段只能取兩個不同的值在查詢中使用LIKE運算符。 =運營商將做

+0

1+整齊,沒有聽說過這個到現在 – TechTreeDev

+0

嘿,謝謝,我複製了你發佈的確切代碼,但是它現在沒有給出任何結果任何想法? –

+0

在原始文章中包含數據庫快照,以便我可以觀察內容。請注意,數據庫必須包含與'itemstat'列完全相同的值。如果$ stat變量包含值'ST'但數據庫列具有'st',則不起作用 – dimlucas