2015-11-13 35 views
0

我在這裏努力瞭解$ _GET的isset邏輯測試的邏輯。這實際上是練習的答案。

所以這是這一部分:

if(isset($_GET['status']) && in_array($_GET['status'], $options)){ 
    $sql .= " WHERE status = ?"; 
    $execute = array($_GET['status']); 
} 

我將不勝感激,如果答案是//內嵌,非常感謝。

1.)據我所知,我們正試圖查看狀態是否爲空,但爲什麼兩次$選項也是?

2.)爲什麼是$ sql分裂?爲什麼不把$ sql帶出來,如果已經用「WHERE status =?」

而PHP頁面的其餘部分是在這裏:

<?php # Exercise solution 1 

$employees = ''; 
$execute = array(); 
$options = array(0,1); 

$db = new PDO('mysql:host=localhost;dbname=eshop;charset=utf8', 'root', ''); 
$sql = "SELECT firstName,lastName FROM employees"; 

if(isset($_GET['status']) && in_array($_GET['status'], $options)){ 
    $sql .= " WHERE status = ?"; 
    $execute = array($_GET['status']); 
} 

$query = $db->prepare($sql); 
$query->setFetchMode(PDO::FETCH_OBJ); 
$query->execute($execute); 
$result = $query->fetchAll(); 

foreach($result as $row){ 

    $employees .= "{$row->firstName} {$row->lastName}<br/>"; 

} 


?> 

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8" /> 
    <title>Exercise solution 1</title> 
    </head> 

    <body> 

    <strong>Employees list</strong>&nbsp;&nbsp; 
    <a href="1.php">All</a>&nbsp; 
    <a href="1.php?status=1">Status Active</a>&nbsp; 
    <a href="1.php?status=0">Status Not Active</a> 
    <br/><br/> 
    <div class="result-list"><?= $employees; ?></div> 

    </body> 
</html> 
+2

@FuzzyTree:不,它不。這是一個徹頭徹尾的語法錯誤。我猜它應該是'isset()' –

+0

既然你永遠不能確定你從客戶端得到了什麼數據,你必須首先檢查你實際發送的一些數據是否被髮送:'if(isset($ _ GET ['狀態']))'只有那樣你才能真正使用它。 – arkascha

+0

我也有一個錯誤,那就是爲什麼即時在這裏完全困惑,這是從我們的練習答案。 – erezT

回答

3

我敢肯定你缺少的功能在這裏可能in_array

in_array($_GET['status'], $options) 

$options將包含所有status可能有效的可能值

+0

絕對,修復它。問題依然存在......感謝模糊。 – erezT

+0

@erezT狀態根據選項進行驗證,以防止用戶將狀態設置爲不允許的狀態並選擇不允許的數據 – FuzzyTree

3

它使where條款有條件。如果未設置該特定查詢參數,則查詢僅爲SELECT everything。否則它變成SELECT just the one specific record