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

#php #html #mysql #checkbox

#php #HTML #mysql #флажок

Вопрос:

В настоящее время у меня есть веб-страница 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']."amp;#13;amp;#13;Project: ".$row['Project']."amp;#13;Sample: ".$row['Sample']."amp;#13;Type: ".$row['Type']."' for='".$row['ProjID']."' class='chkbox-label'> ".$row['Project']." | ".$row['Sample']." | ".$row['Type']."</label>";
  }
?>

</div>
  

Вы можете видеть, что я запрашиваю базу данных SQL, возвращаю несколько полей, а затем использую PHP для создания нескольких флажков. Позже в html я использую javascript для извлечения состояния checked / unchecked этих флажков и повторного запроса к базе данных, чтобы вернуть больше данных.

Что я хотел бы сделать, так это добавить ряд предварительных фильтров, которые уменьшат количество флажков, видимых пользователю на странице. Например, если поле «Тип» определяет, является ли ввод данных «Тортом», «Бисквитом» или «Пудингом», я хотел бы добавить некоторые переключатели, которые затем изменят 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']."amp;#13;amp;#13;Project: ".$row['Project']."amp;#13;Sample: ".$row['Sample']."amp;#13;Type: ".$row['Type']."' for='".$row['ProjID']."' class='chkbox-label'> ".$row['Project']." | ".$row['Sample']." | ".$row['Type']."</label>";
  }
?>

</div>
  

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

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

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

Комментарии:

1. Итак, в основном проверьте с помощью JS, какие поля проверяются и на основе этого выполняются разные запросы?

2. Вы можете параметризовать type в своем SQL и передать его в оператор в зависимости от значения, полученного от интерфейса

3. слишком много запросов замедляет производительность базы данных

4. @MoisheySchwartz это была первоначальная мысль, но поскольку запрос находится в php, как мне поместить javascript в php?

5. Рассматривался AJAX?

Ответ №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>  

Комментарии:

1. Ajax с циклическим перебором результатов с использованием javascript кажется самым чистым решением. Знаете ли вы какие-либо примеры, которые я мог бы просмотреть, а затем применить к своему коду?

Ответ №2:

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

$type = $post[‘type’]; // ‘Торт’,’Печенье’,’Пудинг’

$queryProject = «ВЫБЕРИТЕ ОТДЕЛЬНЫЙ идентификатор проекта, проект, Образец, тип, Описание ИЗ ПРОЕКТОВ, ГДЕ Type = ‘» . $type .»‘ ПОРЯДОК ПО проекту ASC»;

Комментарии:

1. Как мне установить post[‘type’] ?

2. с помощью отправки формы или вызова ajax. Лучше было бы вызвать ajax.