我有以下html文件以关联数组的形式发送数据。表单是使用Jquery Ajax动态提交的(无需提交按钮)。
<html>
<form id="checkboxform" method="GET">
<input type="checkbox" name="navi[key1]" value="value1" <?php echo array_key_exists("value1",$navi)?"checked":""; ?>> Item1
<input type="checkbox" name="navi[key2]" value="value2" <?php echo array_key_exists("value2",$navi)?"checked":""; ?>> Item2
<input type="checkbox" name="navi[key3]" value="value3" <?php echo array_key_exists("value3",$navi)?"checked":""; ?>> Item3
</form>
</html>
然后我有以下php文件来处理表单并从Mysql数据库中选择数据。根据用户检查的输入字段动态生成查询。
<?php
if(isset($_GET['navi'])):
$navi=$_GET['navi'];
//foreach
foreach($navi as $key =>$value):
$query=$key."="."'".$value."'";
endforeach;
// run the query using PDO
$content = $db->getRows("SELECT * FROM products WHERE $query");
endif;
?>
我的问题如下,如何添加&#34; OR &#34;在&#34; $ query &#34;之后变量,前提是用户选择了多个复选框。 Whick将生成如下所示的查询:
SELECT * FROM products WHERE key1='value1' OR key2='value2' OR key3='value3'
我的代码生成以下查询而没有 OR 且不正确。
SELECT * FROM products WHERE key1='value1' key2='value2' key3='value3'
谢谢
答案 0 :(得分:1)
你可以试试这个 -
$query = array();
foreach($navi as $key =>$value):
$query[] = $key."="."'".$value."'"; // store in array
endforeach;
// run the query using PDO
$content = $db->getRows("SELECT * FROM products WHERE " . implode(' OR ', $query)); // implode with OR
答案 1 :(得分:0)
为了防止注射,我会使用prepare
和bindValue
这样的代码,从之前的答案代码(我还没有尝试过,但你可以得到这个想法):
$query = array();
$params = array();
foreach ($navi as $key =>$value):
// store in array
$query[] = $key . '=' . ':' . $key;
// store values to bind them
$params[':' . $key] = $value;
endforeach;
// run the query using PDO
$query = $db->prepare('SELECT * FROM products WHERE ' . implode(' OR ', $query));
// bind params
foreach ($params as $key => $value) :
$query->bindValue($key, $value);
endforeach;
// get rows
$query->execute();
$content = $query->fetchAll();