根据表单输入更改SQL“Where”子句

时间:2017-04-17 21:03:54

标签: php mysql forms checkbox dynamic

尝试找出一个更简单的方法,除了这个巨大的代码段之外,还可以动态创建这个SQL语句

在表单上我有复选框engine1 - engine6,其中有人可以选择全部或不选择(当前选择没有=与选择所有我想要的相同)

下面的代码可以正常生成SQL语句,只是想知道是否有更好的方法可以做到这一点?

第一部分代码确定第一个复选框是什么,第二部分代码根据检查状态添加剩余部分,并在声明中包含所需的“OR”。

   $SQLselect  = "SELECT * FROM enginedataview ";
    if (!empty($_POST["engine1"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 1";
        $starteng=1;
    }
    elseif (!empty($_POST["engine2"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 2";
        $starteng=2;
    }   
    elseif (!empty($_POST["engine3"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 3";
        $starteng=3;

    }   
    elseif (!empty($_POST["engine4"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 4";
        $starteng=4;

    }
    elseif (!empty($_POST["engine5"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 5";
        $starteng=5;

    }       
    elseif (!empty($_POST["engine6"])){
        $SQLselect = $SQLselect ."WHERE engine_id = 6";
        $starteng=6;

    }       
    switch($starteng){
        case "1":       
            if (!empty($_POST["engine2"])){$SQLselect = $SQLselect ." OR engine_id = 2";}
            if (!empty($_POST["engine3"])){$SQLselect = $SQLselect ." OR engine_id = 3";}
            if (!empty($_POST["engine4"])){$SQLselect = $SQLselect ." OR engine_id = 4";}
            if (!empty($_POST["engine5"])){$SQLselect = $SQLselect ." OR engine_id = 5";}
            if (!empty($_POST["engine6"])){$SQLselect = $SQLselect ." OR engine_id = 6";}
            break;
        case "2":
            if (!empty($_POST["engine3"])){$SQLselect = $SQLselect ." OR engine_id = 3";}
            if (!empty($_POST["engine4"])){$SQLselect = $SQLselect ." OR engine_id = 4";}
            if (!empty($_POST["engine5"])){$SQLselect = $SQLselect ." OR engine_id = 5";}
            if (!empty($_POST["engine6"])){$SQLselect = $SQLselect ." OR engine_id = 6";}   
            break;
        case "3":
            if (!empty($_POST["engine4"])){$SQLselect = $SQLselect ." OR engine_id = 4";}
            if (!empty($_POST["engine5"])){$SQLselect = $SQLselect ." OR engine_id = 5";}
            if (!empty($_POST["engine6"])){$SQLselect = $SQLselect ." OR engine_id = 6";}   
            break;
        case "4":
            if (!empty($_POST["engine5"])){$SQLselect = $SQLselect ." OR engine_id = 5";}
            if (!empty($_POST["engine6"])){$SQLselect = $SQLselect ." OR engine_id = 6";}
            break;
        Case "5":
            if (!empty($_POST["engine6"])){$SQLselect = $SQLselect ." OR engine_id = 6";}   
            break;
    }   

3 个答案:

答案 0 :(得分:0)

你能试试吗?

<?php
$ids = array();
for ($i = 1 ; $i < 7 ; $i++) {

  if ($_POST['engine' . $i] == $i) {
    $ids[] = $i;
  }
}

$SQLselect  = "SELECT * FROM enginedataview WHERE engine_id IN(" . implode(', ', $ids) . ")";

答案 1 :(得分:0)

我建议这样的事情,但我自己没有测试过:

#include "DoingSomething.hpp"
class DoingSomething
{
    static DoingSomething *shareInstance;

    public:

    int doSomething()
    {
        /*

         */

        return someValue;
    }

    static DoingSomething *instance()
    {
        if (!shareInstance)
            shareInstance = new DoingSomething;
        return shareInstance;
    }
};

答案 2 :(得分:0)

谢谢那些回答的人。我能够查找准备好的陈述并稍微修改你的建议以获得一些有用的东西它可能不是最好的代码,因为我几年没有这样做并试图重新学习一切。仍然必须通过并使一切都很漂亮,但我有我想要的数据。准备好的陈述很好,可能还有很多其他的东西,比如我不知道存在会让我的生活变得更轻松。将我作为当前的工作代码发布,以防其他人发现这一点,这将有助于他们。

数据库连接$ conn然后这个

keras.models.load_model

表格 - POST 为1-6个引擎创建循环,并从每个

的DB获取数据
$stmt = $conn->prepare("SELECT * FROM enginedataview WHERE engine_id = ?");

更多只是HTML设置标题列 然后循环遍历每个引擎的数据以显示数据

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $i = 1;
    while ($i <7) { 
        if (!empty($_POST["engine". $i])){
        $engineid = ($_POST["engine". $i]);
        $stmt->bind_param("s", $engineid);
        $stmt->execute();
        $result = $stmt->get_result();
        if ($result->num_rows > 0){
?>
        <tr>
            <td align="center">ENGINE # <?php echo $i ?></td>
        </tr>