php - 根据表单输入更改 SQL "Where"子句

标签 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;
    }   

最佳答案

你能试试这个吗?

<?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) . ")";

关于php - 根据表单输入更改 SQL "Where"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459576/

相关文章:

php - 在 php 中的选择查询中添加值

c# - MySQL/C# 插入问题

mysql - 数据库 View : compare values and group by date

mysql - 在 MySQL 中如何使用继承?

javascript - 如果选中复选框,请按 Enter 键提交表单

php - 将两个或多个 xls 文件合并为工作表 PHPExcel

php - 鼠标悬停在堆叠的多个透明图像上

php - 5分钟内生成随机数

html - 形成双重邮寄问题

php - 如果其他文本字段包含文本,则阻止文本字段?