Php 更改SQL";其中;基于表单输入的子句

Php 更改SQL";其中;基于表单输入的子句,php,mysql,forms,checkbox,dynamic,Php,Mysql,Forms,Checkbox,Dynamic,试图找出一个更简单的方法来动态创建这个SQL语句 在表单上,我有一些复选框engine1-engine6,其中有人可以选择全部或全部(当前选择无=实际上与选择全部相同,这是我想要的方式) 下面的代码可以正常工作并正确生成SQL语句,只是想知道是否有更好的方法来实现这一点 代码的第一部分确定第一个复选框是什么,第二组代码根据检查状态添加其余的复选框,并在语句中包含所需的“或” $SQLselect = "SELECT * FROM enginedataview "; if (!em

试图找出一个更简单的方法来动态创建这个SQL语句

在表单上,我有一些复选框engine1-engine6,其中有人可以选择全部或全部(当前选择无=实际上与选择全部相同,这是我想要的方式)

下面的代码可以正常工作并正确生成SQL语句,只是想知道是否有更好的方法来实现这一点

代码的第一部分确定第一个复选框是什么,第二组代码根据检查状态添加其余的复选框,并在语句中包含所需的“或”

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

我建议这样做,但我自己还没有测试过:

for($i = 1; $i <= maxEngines; $i++) {
if(isset($_POST['engine'.$i])){
    $ids[] = $_POST['engine'.$i]
    $marks[] = "?";
}
}


$query = "SELECT * FROM einginedataview WHERE engine_id IN ("
foreach($marks as $mark) {
 $query .= implode("," $marks);
}
$sql = $dph->prepare($query);
$i = 1;
forach($ids as $id) {
 $sql->addParam($i, $whereValue);
 $i++;
}
for($i=1;$i prepare($query);
$i=1;
forach($id作为$id){
$sql->addParam($i,$whereValue);
$i++;
}

感谢那些回答的人。我能够查找准备好的陈述,并修改您的建议,以使某些东西发挥作用。这可能不是最好的代码,因为我已经好几年没有这样做了,并尝试重新学习所有内容。我仍然需要仔细检查,使所有内容都变得漂亮,但我想知道的是数据不是吗。准备好的语句很好,可能还有很多其他东西,比如我不知道的存在,这会让我的生活更轻松。将我的代码作为当前工作代码发布,以防其他人发现,这会对他们有所帮助

数据库连接$conn然后是

$stmt = $conn->prepare("SELECT * FROM enginedataview WHERE engine_id = ?");
邮递 为1-6个引擎创建循环,并从数据库中获取每个引擎的数据

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>   
if($\u服务器[“请求\u方法”]=“发布”){
$i=1;
而($i bind_param(“s”),$engineid);
$stmt->execute();
$result=$stmt->get_result();
如果($result->num_rows>0){
?>
引擎#
还有一些只是HTML设置标题列 然后循环遍历来自每个引擎的数据以显示数据

<?php
    while ($row = $result->fetch_assoc()){
            echo "<tr><td align='center'>". $row["date"];
            echo "</td><td align='center'>". $row["time"];
            echo "</td><td align='center'>". $row["oilpressure"];
            echo "</td><td align='center'>". $row["coolanttemp"];
            echo "</td><td align='center'>". $row["volts"];
            echo "</td><td align='center'>". $row["fuelpressure"];
            echo "</td><td align='center'>". $row["rexhausttemp"];
            echo "</td><td align='center'>". $row["lexhausttemp"];
            echo "</td><td align='center'>". $row["rinletairpress"];
            echo "</td><td align='center'>". $row["linletairpress"];
            echo "</td><td align='center'>". $row["fuelfilterdiff"];
            echo "</td><td align='center'>". $row["oilfilterdiff"];
            echo "</td><td align='center'>". $row["loadpercent"];
            echo "</td><td align='center'>". $row["aftcooltemp"];
            echo "</td></tr>";  
        }
            echo "</tbody></table></td></tr>";


        }

    }
        $i++;       


}
}
?>

当然有,请看。我明天会查一下,检查我得到的其他答案并回复。我想应该有一个更简单的方法。