查询构建取决于复选框选择

时间:2014-05-26 21:12:40

标签: php sql

我想根据我的复选框列表在我的数据库中构建查询。

我的复选框:

<input type="checkbox" id="searchName" checked> Name
<input type="checkbox" id="searchAddress"> Address
<input type="checkbox" id="searchCompany"> Company
<input type="checkbox" id="searchComments"> Comments

我的PHP:

$subQuery='';
if($_POST['searchName']=='true')     { $subQuery .= " AND KDX_Name LIKE :KDX_SearchTerm"; }
if($_POST['searchAddress']=='true')  { $subQuery .= " OR KDX_PostalAddress LIKE :KDX_SearchTerm"; }
if($_POST['searchCompany']=='true')  { $subQuery .= " OR KDX_Company LIKE :KDX_SearchTerm"; }
if($_POST['searchComments']=='true') { $subQuery .= " OR KDX_Comments LIKE :KDX_SearchTerm"; }

我的问题:

如果未选中第一个复选框,则我的查询无效,因为它与OR一起使用,而必须以AND开头。

你能帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您在HTML和PHP中的代码中有很多错误... 我不会在这里提及所有内容,但这就是我要做的事情。

<input type="checkbox" name="searchName" checked="checked" />Name
<input type="checkbox" name="searchAddress" />Address
<input type="checkbox" name="searchCompany" />Company
<input type="checkbox" name="searchComments" />Comments

<?php
$fields = array(
    'searchName'    => 'KDX_Name',
    'searchAddress' => 'KDX_PostalAddress',
    'searchCompany' => 'KDX_Company',
    'searchComments'=> 'KDX_Comments',
);

$cond = array();
foreach ($fields as $form_field => $db_field) {
    if (isset($_POST[$form_field])) {
        $cond[] = "$db_field LIKE '%'" . mysql_escape($_POST[$form_field]) . "%'";
    }
}

$subQuery = implode(' OR ', $cond);
?>

更重要的是这些事情:

  • 正确的HTML表单(不是ID,但名称),
  • 易于扩展PHP(使用数组作为字段名称),
  • 请勿查看$ _POST [foo] ==&#39; true&#39;这绝对是错的,
  • 在数组中添加条件,最后使用implode轻松地将所有内容连接在一起,
  • 转义用户输入变量以避免SQL注入攻击。