【问题标题】:Using HTML checkboxes to dynamically create SQL query within PHP code使用 HTML 复选框在 PHP 代码中动态创建 SQL 查询
【发布时间】: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']."&#13;&#13;Project: ".$row['Project']."&#13;Sample: ".$row['Sample']."&#13;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']."&#13;&#13;Project: ".$row['Project']."&#13;Sample: ".$row['Sample']."&#13;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?

标签: php html mysql checkbox


【解决方案1】:

您必须使用 AJAX 执行此操作,并且每次用户单击复选框时,都会将值发送到不同的页面,然后您可以在另一个页面中使用 PHP 循环遍历结果并以 HTML 形式返回或返回结果并在复选框页面上使用JS循环遍历它

看一个例子:

 $("#formName").on("change", "input:checkbox", function(){
   //send $(this).val() with ajax
   //Assuming you are selecting cakes and
   //getting  back an array with cakes
   //you are the looping thru the array and gettig populating the html
   
   
   var response = [];
   var cakes = {};
   cakes.description = 'Cake Description 1';
   cakes.project = 'Cake Project 1';
   response.push(cakes);
   cakes = {};
   cakes.description = 'Cake Description 2';
   cakes.project = 'Cake Project 2';
   response.push(cakes);
   
   
   var formattedResponse = '';
   response.forEach(function(res){
     formattedResponse += `This is  ${res.description} <br>`});
   
   
    $('#responseContainer').html(formattedResponse);
  
    });
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>

<form action="" id="formName">
  

<label class="form-switch"><input type="checkbox" value="cake" id="filterCake"><i></i> Select Cakes only </label>
<label class="form-switch"><input type="checkbox" value="biscuits" id="filterBiscuit"><i></i> Select Biscuits only </label>
<label class="form-switch"><input type="checkbox" value="puddings" id="filterPudding"><i></i> Select Puddings only </label>

  </from>


<div id="responseContainer"></div>

【讨论】:

  • Ajax 使用 javascript 循环遍历结果听起来是最干净的解决方案。您知道我可以查看然后应用于我的代码的任何示例吗?
【解决方案2】:

是的,您可以通过动态查询从数据库中获取数据。请试试这个。

$type = $post['type']; //'蛋糕','饼干','布丁'

$queryProject = "SELECT DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS WHERE Type = '" 。 $type ."' ORDER BY Project ASC";

【讨论】:

  • 如何设置帖子['type']?
  • 带有表单提交或 ajax 调用。最好是 ajax 调用。
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多