Использование флажков HTML для динамического создания запроса SQL в коде PHP - PullRequest
0 голосов
/ 10 апреля 2019

В настоящее время у меня есть веб-страница 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, чтобы извлечь проверенное / непроверенное состояние этих флажков и снова запросить базу данных, чтобы получить больше данных.

Что я хотел бы сделать, это добавить несколько предварительных фильтров, которые уменьшат количество флажков, видимых пользователю на странице. Например, если поле «Тип» определяет, является ли запись данных «Cake», «Biscuit» или «Pudding», я хотел бы добавить некоторые параметры, которые затем изменили бы 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>

...

Как мне добиться этого с помощью моего кода?

Все, что мне нужно сделать, это изменить SQL-запрос в коде PHP (добавив предложение WHERE) в зависимости от состояния флажков «торт», «печенье» или «пудинг», но я изо всех сил пытался понять, как это сделать.

Любая помощь с благодарностью!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Вам нужно будет сделать это с 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>
0 голосов
/ 11 апреля 2019

да, вы можете получить данные из базы данных, сделав динамический запрос. Пожалуйста, попробуйте это.

$ type = $ post ['type']; // 'Cake', 'Бисквит', 'Pudding'

$ queryProject = "ВЫБЕРИТЕ DISTINCT ProjID, Project, Sample, Type, Description FROM PROJECTS WHERE Type = '". $ type. "'ORDER BY Project ASC";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...