【发布时间】:2019-04-11 08:19:54
【问题描述】:
我目前有一个 html / PHP 网页,它使用一系列用户输入来查询 SQL 数据库并返回数据以进行绘图。用户输入由 html 复选框驱动,由 SQL 数据库中的数据驱动并使用 PHP 代码创建。整个 html 代码太大,这里放不下,但下面是我想问的部分的摘录......
...
<div id="AccProject" class="w3-hide">
<?php
$queryProject = "SELECT DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS ORDER BY Project ASC";
$resultProject = $dbhandle->query($queryProject) or exit("Error code ({$dbhandle->errno}): {$dbhandle->error}");
while($row=mysqli_fetch_array($resultProject)){
echo "<input id='".$row['ProjID']."' value='".$row['ProjID']."' name='projID[]' type='checkbox' class='chkbox'>";
echo "<label title='".$row['Description']." Project: ".$row['Project']." Sample: ".$row['Sample']." Type: ".$row['Type']."' for='".$row['ProjID']."' class='chkbox-label'> ".$row['Project']." | ".$row['Sample']." | ".$row['Type']."</label>";
}
?>
</div>
...
可以看到我查询了SQL数据库,返回了一些字段,然后用PHP生成了一些复选框。后来在html中,我使用javascript提取这些复选框的选中/未选中状态并再次查询数据库以返回更多数据。
我想做的是添加一些预过滤器,这将减少页面上用户可见的复选框数量。例如,如果“类型”字段定义数据条目是“蛋糕”、“饼干”还是“布丁”,我想添加一些开关,然后修改 SQL 查询。我在下面给出了一个带有一些伪代码的示例。
...
<div id="AccProject" class="w3-hide">
<label class="form-switch"><input type="checkbox" id="filterCake"><i></i> Select Cakes only </label>
<label class="form-switch"><input type="checkbox" id="filterBiscuit"><i></i> Select Biscuits only </label>
<label class="form-switch"><input type="checkbox" id="filterPudding"><i></i> Select Puddings only </label>
<?php
if filterCake == True
$queryProject = "SELECT DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS WHERE Type == 'Cake' ORDER BY Project ASC";
if filterBiscuit == True
$queryProject = "SELECT DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS WHERE Type == 'Biscuit' ORDER BY Project ASC";
if filterPudding == True
$queryProject = "SELECT DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS WHERE Type == 'Pudding' ORDER BY Project ASC";
$resultProject = $dbhandle->query($queryProject) or exit("Error code ({$dbhandle->errno}): {$dbhandle->error}");
while($row=mysqli_fetch_array($resultProject)){
echo "<input id='".$row['ProjID']."' value='".$row['ProjID']."' name='projID[]' type='checkbox' class='chkbox'>";
echo "<label title='".$row['Description']." Project: ".$row['Project']." Sample: ".$row['Sample']." Type: ".$row['Type']."' for='".$row['ProjID']."' class='chkbox-label'> ".$row['Project']." | ".$row['Sample']." | ".$row['Type']."</label>";
}
?>
</div>
...
如何使用我的代码实现这一点?
我需要做的就是根据蛋糕、饼干或布丁复选框的状态更改 PHP 代码中的 SQL 查询(添加 WHERE 子句),但我一直在努力寻找如何做到这一点。
非常感谢任何帮助!
【问题讨论】:
-
所以基本上用 JS 检查哪些字段被检查并基于该字段做不同的查询?
-
您可以在 SQL 中参数化
type并根据从前端收到的值将其传递给语句 -
查询过多会降低数据库性能
-
@MoisheySchwartz 这是最初的想法,但由于查询在 php 中,我如何将 javascript 放入 php 中?
-
考虑使用 AJAX?