0

私はオンライン ストアを作成しており、データベースからブランド別に結果をフィルター処理する必要があります。ブランドは 3 つだけではないため、すべてのブランドを通過するループを作成するにはどうすればよいでしょうか。コードは次のとおりです。

$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");
4

5 に答える 5

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
}

これは疑似コードです..しかし、インジェクションの問題のないクリーンなコードです:)

于 2013-07-17T11:01:53.447 に答える
-1
  1. それは簡単です。コードを書くのが難しいのはなぜですか?phpは動的です。
  2. 並べ替えるには を使用する必要がありORDER BY、フィルタリングしたい..

この例では、変数名は変更しません。これはクエリ構築ステートメントのみです。

$sortby = $_GET['sortby'];
$sort_query = $sortby == 'name' ? "" : "WHERE category = '{$sortby}'";
$sql = mysql_query("SELECT * FROM products {$sort_query}");
于 2013-07-17T11:00:41.083 に答える
-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']."'";
    } 
}
于 2013-07-17T11:00:49.813 に答える