2014-05-08 35 views
0

我在獲取多功能工具的某些功能時遇到了相當多的困難。我希望能夠按名稱或目錄號進行分類,按類別過濾或進行開放式搜索。下面是當前的代碼:多功能PHP代碼 - 似乎無法使其工作

$sort = ($_POST['sort']) ? $_POST['sort'] : 'name'; 
$order = ($_POST['order']) ? $_POST['order'] : 'asc'; 

if($_POST['Search']) 
{ 
    $search = ($_POST['Search']); 
    $query_compounds = "select * from compounds where name like'%$search%' or catalog_number like'%$search%' or synonyms like'%$search%' or cas_number like'%$search%' or formula_weight like'%$search%' or molecular_formula like'%$search%'"; 
} 
else if($_POST['category']) { 
    $category = ($_POST['category']); 
    $query_compounds = "select * from compounds where category = ".$category; 
} 
else { 
    $query_compounds = "select * from compounds order by " . $sort . " " . $order; 
} 

在頁面之後,下面的代碼被要求:

<form name="SortForm" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" style="float:left;"> 
    <select name="sort"> 
     <option <?php if($sort == 'name'){ echo "selected"; }?> value="name">Name</option> 
     <option <?php if($sort == 'catalog_number'){ echo "selected"; }?> value="catalog_number">Catalog Number</option> 
    </select> 
    <select name="order"> 
     <option <?php if($order == 'asc'){ echo "selected"; }?> value="asc">Ascending</option> 
     <option <?php if($order == 'desc'){ echo "selected"; }?> value="desc">Descending</option> 
    </select> 
    <input name="SortForm" type="submit" id="SortForm" value="Sort"> 
</form> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" style="float:left;"> 
    <select name="category"> 
     <option <?php if($category == 'Compounds'){ echo "selected"; }?> value="Compounds">Compounds</option> 
     <option <?php if($category == 'Glucuronides'){ echo "selected"; }?> value="Glucuronides">Glucuronides</option> 
     <option <?php if($category == 'Metabolites'){ echo "selected"; }?> value="Metabolites">Metabolites</option> 
    </select> 
    <input name="category" type="submit" id="category" value="Select"> 
</form> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET" style="float:left;"> 
    <input id="Search" type="text" placeholder="Type here"> 
    <input id="Search" type="submit" value="Search" name="Search"> 
</form> 

在這個問題上的任何援助將不勝感激。

+5

僅供參考,你是大開[SQL注入(http://stackoverflow.com/q/60174) –

+5

究竟如何不工作的代碼?它沒有搜索?它返回結果?這是侮辱你的母親和踢你的狗? –

+0

與外部數據建立運行SQL語句就像吃從您的家門口發現食材製成的湯。 –

回答

0

您需要更改該PHP儘快。請參閱上面關於SQL注入的評論。你的代碼很危險。

至於過濾,讓PHP通過動態構建查詢來爲您完成繁重的工作。當你發現自己重複的東西 - 例如您的個人查詢 - 這是一個很好的指標,表明您處在錯誤的道路上。我建議尋找像Laravel這樣的框架。它照顧了很多這樣的樣板文件。它的查詢生成器非常棒。

如果你想這樣做,使用純PHP,那麼這樣做:

$where = array(); 

if (isset($_POST['Search'])) { 
    $search = mysql_real_escape_string($_POST['Search']); 
    $where['Search'] = "(name LIKE('%".$search."%') 
         OR catalog_number LIKE('%".$search."%') 
         OR synonyms LIKE('%".$search."%') 
         OR cas_number LIKE('%".$search."%') 
         OR formula_weight LIKE('%".$search."%') 
         OR molecular_formula LIKE('%".$search."'))"; 
} 

if (isset($_POST['category'])) { 
    $category = mysql_real_escape_string($_POST['category']); 
    $where['category'] = "category = '".$category."'"; 
} 

if (count($where) > 0) { 
    $where = ' WHERE '.implode(' AND ', $where);  
} 

$sql = 'SELECT * FROM compounds'.$where.' ORDER BY ...'; 

請注意,我用mysql_real_escape_string()來消毒用戶輸入,只是因爲我懷疑你還在使用mysql_功能。你應該至少使用mysqli_函數。

使用上述策略,您可以根據需要篩選儘可能多的(或少數)變量。

+0

這似乎已經幫助數據的原始問題最初沒有顯示出來,但似乎並沒有做什麼來解決剩餘的兩個問題: 每當我在搜索欄中鍵入,不管什麼我打字,並點擊「搜索「,它會帶回數據庫中的所有內容。 此外,當我選擇一個類別,然後單擊「選擇」,什麼也不顯示。是的,我檢查,以確保數據庫中的所有產品已指派一個類別。 – user3617010