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