php - 从多个复选框形成查询字符串

标签 php sql checkbox

我正在尝试从多个复选框中形成一个查询字符串,这些复选框将用于查询我的数据库。

我有以下表格:

            <fieldset data-role="controlgroup">

            <input type="checkbox" name="wheat" id="checkbox-1a" class="custom" />
            <label for="checkbox-1a">Wheat Allergy</label>

            <input type="checkbox" name="yeast" id="checkbox-2a" class="custom" />
            <label for="checkbox-2a">Yeast Allergy</label>

            <input type="checkbox" name="sugar" id="checkbox-3a" class="custom" />
            <label for="checkbox-3a">Sugar Allergy</label>

            <input type="checkbox" name="dairy" id="checkbox-4a" class="custom" />
            <label for="checkbox-4a">Dairy Allergy</label>

我的PHP代码如下:

        if(isset($_POST['wheat']))
        {
            $str1 = 'wheatfree = 1';
        }

        if(isset($_POST['yeast']))
        {
            $str2 = 'yeastfree = 1';
        }

        if(isset($_POST['sugar']))
        {
            $str3 = 'sugarfree = 1';
        }

        if(isset($_POST['dairy']))
        {
            $str4 = 'dairyfree = 1';
        }

        $fullsearch = $str1.$str2.$str3.$str4;

        $str_SQL = "SELECT * FROM recipes WHERE ".$fullsearch;

        echo $str_SQL;

这有点符合我的要求,但不是很优雅。

首先,sql 查询如下所示:

SELECT * FROM recipes WHERE sugarfree = 1dairyfree = 1

如果用户选择不选择一个,我当然会收到未选择的 str 的 undefined variable 错误。

不太确定如何解决这个问题或下一步该去哪里。我想要这里的一些逻辑,只是根据在表单上检查的内容修改字符串,然后形成一个干净的 SQL 查询,我可以针对我的数据库运行。但是,唉,我迷路了:(

帮助?

最佳答案

Dave 的进一步回答:

$options = Array();
$ingredients = Array('wheat', 'yeast', 'sugar', 'dairy');

foreach ($ingredients as $i)
   if (isset($_POST[$i]))
      $options[] = $i . 'free = 1';

$sql = "SELECT * FROM recipes";
if (count($options))
   $sql .= " WHERE " . implode(' AND ', $options);

echo $sql;

但是为什么不使用复选框的 value 属性呢?

<input type="checkbox" name="ingredients[]" value="wheat" />
<input type="checkbox" name="ingredients[]" value="sugar" />

等等

然后:

$options = Array();
foreach ($_POST['ingredients'] as $i)
   $options[] = $i . 'free = 1'; // don't forget to escape $i somehow!

$sql = "SELECT * FROM recipes";
if (count($options))
   $sql .= " WHERE " . implode(' AND ', $options);

echo $sql;

关于php - 从多个复选框形成查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5059261/

相关文章:

sql - SQL Server Management Studio 中 'go' 附近的语法不正确

php - 将单选按钮和复选框的值放入数据库 PHP

php - 检查调试 :autowiring 时找不到类 WebTestCase

MySQL从另一个表复制列

java - 是否有任何表格可以从 MAC 地址识别设备品牌?

mysql - 如何在Workbench中创建复合键?

java - 处理选中和未选中的复选框

javascript - 为什么某些输入元素具有 setSelectionRange 属性以及如何测试它是否确实受支持?

php - 常量服务器变量?

php - 创建内部包含不同变量的 php 副本