2012-12-08 47 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子句连接它们,并将其与其他标准符合。