php
2013-07-17 41 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 
} 

这是一个伪代码..但很干净的代码,而注入的问题:)

相关问题