繁体   English   中英

从复选框中检索数组值并动态构建查询以选择内容

[英]retrieving array values from checkbox and dynamically building a query to select content

我有以下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;
    ?>

我的问题是,如果用户选择多个复选框,如何在“ $ query ”变量后添加“ OR ”。 Whick将生成如下查询:

SELECT * FROM products WHERE key1='value1' OR key2='value2' OR key3='value3'

我的代码生成不带OR且不正确的以下查询。

SELECT * FROM products WHERE key1='value1' key2='value2' key3='value3'

谢谢

你可以试试这个-

    $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

为了防止注入,我将使用preparebindValue这样的方法,它来自先前答案的代码(我没有尝试过,但是您可以理解):

    $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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM