2012-12-08 185 views
0

我試圖創建具有多個條件字段的搜索系統。我的問題是如何處理空標準字段(用戶忽略)。我需要檢查變量是否爲空以實現AND條件。在我的情況下,姓氏是必需的,所以我只需要檢查ID名和ID不是空字段:PostgreSQL搜索查詢 - 檢查空字段

$query ="SELECT first_name, last_name FROM students WHERE last_name ILIKE '%$last_name%' "; 


if(isset($_GET['$first_name'])) 
$condition[]="first_name ILIKE '%$first_name'"; 

if(isset($_GET['$ID'])) 
$condition[]="ID = '$ID'"; 



if(!empty($condition)) 
$query .= implode(' AND ',$condition); 

$result = pg_query($query); 

這是行不通的。

+0

你在哪裏設置'$ _GET'值爲'last_name'字段 –

回答

1

我覺得你是缺少一個AND

​​
1

也許你是從GET請求變量是錯的,他們的名字後$符號。

此外,您可以在執行它之前打印查詢,看它是否格式良好。

試試這個,併發布結果請。

$query ="SELECT first_name, last_name FROM students WHERE last_name ILIKE '%$last_name%' ";

if(isset($_GET['$first_name'])) 
$condition[]="first_name ILIKE '%$first_name'"; 

if(isset($_GET['$ID'])) 
$condition[]="ID = '$ID'"; 


if(!empty($condition)) 
$query .= implode(' AND ',$condition); 
echo $query; exit(); 
$result = pg_query($query); 
1

邏輯應該工作,但似乎你有一個缺乏基本的PHP語法和原則。

我猜你:

<input type='text' name='ID' /> 

<input type='text' name='$ID' /> 

所以爲此你應該使用$_GET['id']


接下來的事情,好像你在registered globals這是在PHP的新版本棄用計數。

你應該使用:

$condition[]="ID = '" . $_GET['ID'] . "'"; 

You're not escaping income values,使用pg_escape_string()

$condition[]="ID = '" . pg_escape_string($connection, $_GET['ID']) . "'"; 

你不能初始化數組$conditions,添加:

$conditions = array(); 

到腳本的開頭


你錯過AND當你建立最終的查詢:

if(count($conditions)){ 
    $query .= ' AND ' . implode(' AND ', $conditions); 
} 

或者你也可以添加到last_name$conditions

$query ="SELECT first_name, last_name FROM students WHERE "; 
$conditions = array(
    "last_name ILIKE '%" . 
     pg_escape_string($connection, $_GET['last_name']) . 
     "%'" 
); 
// ... 
$query .= implode(' AND ', $conditions); 
+0

「缺少基本的PHP語法」 –

+0

@RPM呵呵?那有什麼問題? – Vyktor

+0

@Vytkor在這個夜晚的時間裏,它是非常幽默的。別擔心。 –

0

看看Pomm's Where類。它允許您輕鬆創建AND/OR標準,並將它們與值綁定以逃避它們。通過這種方式,您可以使用多個選擇列表並使用OR子句連接它們,並將其與其他標準符合。