【问题标题】:retrieving array values from checkbox and dynamically building a query to select content从复选框中检索数组值并动态构建查询以选择内容
【发布时间】:2016-04-06 11:16:03
【问题描述】:

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

谢谢

【问题讨论】:

    标签: php jquery html mysql sql


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      为了防止注入,我会像这样使用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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多