基于多个GET变量的动态查询(精确搜索表单)

时间:2009-09-20 23:31:39

标签: php mysql forms url get

因此,我试图找到一个脚本,可以启动我创建一个'精炼搜索'面板,这将是一个表格,希望与Ebay目前接近的东西。

虽然我知道这将是一个表单并使用GET方法,但我找不到一个脚本可以解析多个参数的URL并动态更新查询。

我不确定如何在没有百万和一个if语句的情况下做到这一点。 (大约10个左右可能的GET变量,但可能会更快。)

所以我需要一个简单的:

  • foreach GET add WHERE field=GET[variable]

你知道的任何现成的脚本吗?

3 个答案:

答案 0 :(得分:3)

我不知道有一些罐装脚本可以做到这一点。

但是你自己写它很容易。

<?PHP
    $valid_fields = array('field1','field2',...'fieldN');

    $where = "WHERE 1=1 ";

    foreach($valid_fields as $fname){
       if (! empty($_GET[$fname])){
          $where .= " AND $fname='" . mysql_real_escape_string($_GET[$fname]) ."'";
       }
    }

此代码只是循环遍历您的预期输入变量,如果它们作为$ _GET中的参数传递,则将AND与WHERE子句一起广告。

然后你只需将$ where放在查询结尾处(无论它是什么):

$sql = 'SELECT * FROM some_table ' . $where;

编辑示例代码以隐藏列名称:

<?PHP
//keys are parameter names in _GET, values are database column names.
$fieldmap = array(
'fname'=>'first_name',
'lname'=>'last_name'
);

$where = '1=1 ';

foreach($fieldmap as $get_name => $col_name){
  if (! empty($_GET[$get_name])){
    $where .= " AND $col_name = '" . mysql_real_escape_string($_GET[$get_name]) . "'";
  }
}
?>

答案 1 :(得分:0)

我对PHP几乎一无所知,但是在这里有一些关于检索和解析查询字符串的讨论(向下滚动一下):

http://us2.php.net/manual/en/reserved.variables.get.php

您可以从中提取一些有用的代码来提取所有GET参数并使用它们来构造WHERE子句。我不确定你的数据模型是如何设置的,所以我不能提供任何详细的建议 - 除了通常的建议,清理你的所有输入,这样你就不会得到Bobby Tables在你的手上。

答案 2 :(得分:0)

你的意思是这样的吗?

<?php
$query = "SELECT [WHATEVER YOU'RE SELECTING] FROM your_table WHERE ";
$length = count($_GET);
$count = 0;
foreach($_GET as $key => $value){
    if($count <= $length){
        $query .= "$key='{$value}' OR ";
    }else{
        $query .= "$key='{$value}'";
    }

    $count++;
}
?>

这将循环遍历$ _GET数组,将key ='value'类型字符串添加到查询字符串中。然后,一旦你完成了对数组的递归,你可以用完整的查询字符串做任何你想做的事。

按照惯例,在收集输入时使用标准清理功能(strip_slashes,mysql_real_escape_string等)