2012-10-16 166 views
0

我想$_GET一些變量,用戶可以輸入(正忙着做一個基本的Web服務器)的代碼,這樣的:無法弄清楚如何在PHP

$users= strval($_GET['user']); 
$price= intval($_GET['price']); 
$productID= intval($_GET['productid']); 

這是我的查詢:

$query = "SELECT * FROM `table` WHERE `user` = '" . $user . "' AND `price` <= " . $price . " AND `productID` = " . $productID; 

(像這樣)

鑑於這種理論聯繫:

www.example.com/api.php?price=300 

並且不要使用剩餘的GET(user和productID)將自動填充0或''(int/string)。

所以我想我可以用一個if聲明:如果我有價格,或的productID和的productID作爲用戶變量的組合

if(price == 0){ 
    // change the query without the price as WHERE 
} 

但什麼。

處理這個問題的最佳方法是什麼?也許這是一個愚蠢的問題,但我無法弄清楚。

回答

2

您可以使用合併IF語句使用變量,如果他們提供的(而忽略他們,如果不)

$query = "SELECT * FROM `table` WHERE 1"; // WHERE 1 means "return all rows from table" 

if (isset($_GET['price'])){ // Only if price variable is set 
    $query .= " AND price <= '{$_GET['price']}'"; // Restrict results by price 
} 

if (isset($_GET['user'])){ // Only if user variable is set 
    $query .= " AND user LIKE '{$_GET['user']}'"; // Restrict results by user 
} 

if (isset($_GET['productID'])){ // Only if user variable is set 
    $query .= " AND productID = '{$_GET['productID']}'"; // Restrict results by productID 
} 
+0

因此。=向查詢添加文本..不錯,不知道,但isset()方法......這樣做的工作,因爲如果0已經在它或''其自動設置正確? – user1692174

+0

@ user1692174:據我所知,當沒有設置變量(使用* GET *方法)時,它是* null *,而不是'0'。 – JCOC611

+0

它工作得很好! isset檢查函數,如果它沒有設置它不做任何事情..tnx!現在我需要搜索安全嘿嘿 – user1692174

0

您可以使用三元運算符來正確地作出查詢字符串建立相應的查詢,串聯價格條款當它被設置。

$query = "select * from table where user = $user" . ($price ? " AND price <= $price" : "") . " AND productID = $productID"; 

你的英文不好,我們是巴西人O/

0
$users = $_GET['user'] || ""; 
$price = $_GET['price'] || 0; 
$productID = $_GET['productid'] || 0; 
$query = "SELECT * FROM table WHERE 1"; 

$query .= (isset($_GET['user'))?"AND user = '{$users}'"; 
$query .= (isset($_GET['price'))?"AND price <= '{$price}'"; 
$query .= (isset($_GET['productid'))?"AND productID = '{$productID}'"; 

如果你想使用的變量別的東西。如果它們未在$_GET數據中設置,則將值設置爲0""(空字符串)。

+0

如果你設置0或「」的查詢結果將受到影響,所以我不能設置0或「」 – user1692174