php
2013-07-17 43 views 0 likes 
0

我在做一家網上商店,我需要根據數據庫中的品牌過濾結果。我如何創建一個循環遍歷所有品牌,因爲它們不僅僅是三個。 下面是代碼:按品牌循環篩選

$sortby = $_GET['sortby']; 
if(!$sortby) { $sortby = 'name'; } 

if($sortby == 'Brand1') 
{ 
    $sort_query = "WHERE category = 'Brand1"; 
} 
else if($sortby == 'Brand2') 
{ 
    $sort_query = "WHERE category = 'Brand2'"; 
} 
else if($sortby == 'Brand3') 
{ 
    $sort_query = "WHERE category = 'Brand3'"; 
} 
else if($sortby == 'name') 
{ 
    $sort_query = ""; 
} 
else { unset($sortby); } 

if($sortby) 
{ 
    $select[$sortby] = 'selected'; 
} 
$sql = mysql_query("SELECT * FROM products $sort_query"); 
+0

SQL注入警報!你也可以編寫'$ sql = mysql_query($ _ GET ['query']);'。您應該使用PDO或mysqli和準備好的語句。這是一篇很好的[關於PDO的文章](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/) –

回答

0

事情是這樣的:

$sortby = $_GET['sortby']; 
if(!$sortby) { 
    $sort_query = ""; 
} else { 
    $sort_query = "WHERE category = '".mysql_real_escape_string($sortby)."'"; 
} 
$sql = mysql_query("SELECT * FROM products $sort_query"); 

記住:永遠不要相信用戶!總是逃避用戶輸入!

另外,使用mysql-prefixed函數已過時。你應該檢查如何使用mysqli。

+1

謝謝,這工作。 – Alex

+0

設置$ sortby是什麼意思?此代碼工作,但根本不工作,並使用不推薦使用的函數。 –

+0

修復了錯字。 – Raidok

0

試試這個:

$sortby = mysql_real_escape_string($_GET['sortby']) or $sortby = "name"; 

if($sortby != "name") { 
    $sort_query = "WHERE category = '$sortby'"; 
    $select[$sortby] = 'selected'; 
} else { 
    $sort_query = ""; 
} 

$sql = mysql_query("SELECT * FROM products $sort_query"); 
+0

你做了什麼?用戶給出的不存在的值? –

+0

這是根據手頭的問題編寫的 - 如果值不存在,查詢將返回空。 – ninty9notout

-1
  1. 這很簡單。爲什麼要寫代碼這麼辛苦? PHP是動態的。
  2. 排序,你必須使用ORDER BY,要過濾..

這裏例如,變量名我不會改變。 這只是查詢建立語句。

$sortby = $_GET['sortby']; 
$sort_query = $sortby == 'name' ? "" : "WHERE category = '{$sortby}'"; 
$sql = mysql_query("SELECT * FROM products {$sort_query}"); 
+0

沒有在這裏檢查有效的用戶輸入.... –

+0

@MichaelWalter BE ATTENTIVE !!!我寫了「這只是查詢建立聲明」。所以在downvotes之前閱讀所有帖子。 –

+0

你爲我的downvote設置了downvote,但是Stackowerflow是一個交換我們的棧和知識的地方,並且相互學習,這不是幼兒園@MichaelWalter。 –

-1

您應該從您的數據庫中選擇所有可用的品牌,而不是循環使用它們。

$sql = "SELECT DISTINCT `category` FROM products" 
[mysql stuff] 
while($cat = [assoc array]) /*use your prefered functions*/ 
{ 
    if($sortby == $cat['category']) 
    { 
     $sort_query = "WHERE category = '".$cat['category']."'"; 
    } 
} 
+0

查詢工作更優化和更快的比PHP循環 –

+0

他想檢查品牌名稱是否有效,並選擇所有與這個品牌的產品。請爲此創建一個查詢。 –

+0

「需要根據數據庫中的品牌過濾結果」 - 可悲的是,問題中沒有任何內容指定他想檢查品牌名稱是否有效,只需要過濾結果即可。讓他有疑問的好處來設置他的有效類別。 – ninty9notout

0

我會寫這樣的代碼:

$sortby = $_GET['sortby']; 
$valid_brands = array('brand1','brand2'); 


if(in_array($sortby, $valid_brands)){ 
    $sql = "SELECT * FROM products where category = ?"; 
    $stmt = $db_usag->prepare($sql); 
    $stmt->bind_param($sortby); 
} 
else{ 
    $sql = "SELECT * FROM products"; 
    $stmt = $db_usag->prepare($sql); 
} 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

這是一個僞代碼..但很乾淨的代碼,而注入的問題:)

相關問題