2017-09-27 48 views
1

我很新的編程,目前正在研究視頻遊戲數據庫thingy。我被困在一個我想用「GET」方法篩選條目的地方。這一切工作正常,直到我想搜索多個參數爲主要問題是要通過我的開關/案例陳述多個倍。因此,這裏的代碼:如何通過在php中使用switch/case來獲取多個GET參數?

$columnName = NULL; 
    $searchValue = NULL; 

    switch ($_GET) { 
    case isset($_GET['name']): 
     $columnName = "games.name"; 
     $searchValue = $_GET['name']; 
     break; 
    case isset($_GET['developer']): 
     $columnName = "developer.name"; 
     $searchValue = $_GET['developer']; 
     break; 
    case isset($_GET['device']): 
     $columnName = "devices.name"; 
     $searchValue = $_GET['device']; 
     break; 
    case isset($_GET['company']): 
     $columnName = "company.name"; 
     $searchValue = $_GET['company']; 
     break; 
    case isset($_GET['medium']): 
     $columnName = "medium.name"; 
     $searchValue = $_GET['medium']; 
     break; 
    default: 
     break; 
} 

if ($columnName !== null && $searchValue !== null) { 
    $selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'"; 
} 

變量$ selectStatement是我的數據庫條目的選擇語句,但我認爲這不會有助於它張貼在它的全部。

在此先感謝。

編輯:

我很驚訝,我只是一個幾分鐘後,有這麼多的答案,太感謝你了! 但我試過每一個你的答案,沒有一個真正爲我工作。例如,如果我現在搜索兩個參數,它只能識別最後一個參數。 在這個例子中 http://localhost/index.php?developer=ubisoft&medium=disc 那隻能說明我的媒介,而不是開發者...

+0

使用多個'if'語句而不是'switch' – ArtOsi

+0

我想如果你不使用「break」,那麼它會檢查每個參數。但是,您將需要更改值和列值以包含所有參數。 –

+0

@MrKiwey更新了我的答案,請檢查 –

回答

0

if語句多個條件或不使用break語句(不推薦)

工作演示,您應該使用靜態GET值https://eval.in/868873

if ($_GET) { 
    if(isset($_GET['name'])) 
    {  
     $columnName[] = "games.name"; 
     $searchValue[] = $_GET['name']; 
    } 
    if(isset($_GET['developer'])) 
    {  
     $columnName[] = "developer.name"; 
     $searchValue[] = $_GET['developer']; 
    } 
    if(isset($_GET['device'])) 
    {  
     $columnName[] = "devices.name"; 
     $searchValue[] = $_GET['device']; 
    } 
    if(isset($_GET['company'])) 
    {  
     $columnName[] = "company.name"; 
     $searchValue[] = $_GET['company']; 
    } 
    if(isset($_GET['medium'])) 
    {  
     $columnName[] = "medium.name"; 
     $searchValue[] = $_GET['medium']; 
    } 
} 

遍歷columnName

$selectStatement = ''; 
if ($columnName !== null && $searchValue !== null) { 
    $length = count($columnName); 
    for ($i=0; $i < $length; $i++) { 
     if ($i == 0) 
      $selectStatement .= " WHERE " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'"; 
     else 
      $selectStatement .= " AND " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";   
    } 
} 

echo $selectStatement; 

?developer=ubisoft&medium=disc

輸出:

WHERE developer.name LIKE '%ubisoft%' AND medium.name LIKE '%disc%' 
+0

還添加了帶有靜態GET參數的演示鏈接 –

0

爲什麼要使用開關/ case語句?它適合在元素集中搜索一個元素。只要使用if語句。它看起來像如下:

$columns = array(); 

if(isset($_GET["column1"])) { 
    $columns []= $_GET["column1"];  
} 

if(isset($_GET["column2"])) { 
    $columns []= $_GET["column2"];  
} 

$columnsString = implode(",", $columns); 

// You will get string like "column1,column2" 
// And you can make the same thing with your WHERE statements 
0

交換機是不理想用於您的情況。

你可以有一個IF ELSE條件

if (isset($_GET['name'])){ 
    $columnName = "games.name"; 
    $searchValue = $_GET['name']; 
} 
elseif(isset($_GET['developer'])) { 
    $columnName = "developer.name"; 
    $searchValue = $_GET['developer']; 
} 
elseif(){ 

} 
and so on.... 

另一種方法是你可以有一個數組來映射你的參數列名。

$_GET['type'] --> this can be your name, developer, medium, device, company... 
$_GET['value'] --> your value for name or developer or medium.... 

$mapping = [ 
    'name' => 'games.name', 
    'developer' => 'developer.name', 
    'device' => 'device.name', 
    'medium' => 'medium.name' 
]; 

$columnName = $mapping[$_GET['type']]; 
$searchValue = $_GET['value']; 

$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'"; 
相關問題