Поиск флажка SQL, который отображает список элементов, которые находятся в моей базе данных - PullRequest
1 голос
/ 27 июня 2019

Я настраиваю страницу каталога, которая отображает различные тренировки в зависимости от того, что ищется через текстовое поле (работает) и / или флажки (не работает)

Я не знаю, возможно ли это без кнопки отправки, но я бы хотел, чтобы она выполняла поиск элементов, а также позволяла искать несколько флажков

Я пытался искать помощь в Интернете, но не могу найти ничего, что связано с моим проектом.

$sqlBrowse = "SELECT * FROM workoutLibrary
                WHERE name LIKE :findInName
                OR bodyPart  LIKE :findInBodyPart
                OR muscleGroup LIKE :findInMuscleGroup
                OR equipment LIKE :findInEquipment
                ORDER BY name";

$searchTerm = '';
$search = '%';
if (isset($_POST['search'])) {
    $searchTerm = $_POST['search'];
    $search = '%' . $searchTerm . '%';
    $stmt = $conn->prepare($sqlBrowse);
    $stmt->bindParam(":findInName", $search);
    $stmt->bindParam(":findInBodyPart", $search);
    $stmt->bindParam(":findInMuscleGroup", $search);
    $stmt->bindParam(":findInEquipment", $search);
    $stmt->execute();
    $exercises = $stmt->fetchAll();
}
else if (isset($_POST['checklist'])) {
    $searchTerm = $_POST['checklist'];
    $search = '%' . $searchTerm . '%';

    $stmt = $conn->prepare($sqlBrowse);
    $stmt->bindParam(":findInEquipment", $search);
    $stmt->execute();
    $exercises = $stmt->fetchAll();
}
?>

HTML:

<form action="directory.php" method="post">
   <input type="checkbox" name="checklist[]" class="check" value="Dumbell"> Dumbbell<br>
   <input type="checkbox" name="checklist[]" class="check" value="kettlebell"> Kettlebell<br>

</form>

      <div class="col-sm-10">
          <h1 class="theTitle"> Workout Directory </h1>
            <div class="d-flex flex-wrap">
              <?php
                foreach ($exercises as $exercise) {
               ?>
                <div class="card" id="workoutCard">
                  <div class="card-header"> <?= $exercise->name ?> </div>
                  <div class="card-body">
                      <div class="thumbnail"> </div>
                        <div class="info">
                          <a id="subTitle">Body Parts:</a> <?= $exercise->bodyPart ?><BR>
                          <a id="subTitle">Muscle Group:</a> <?= $exercise->muscleGroup ?><BR>
                          <a id="subTitle">Equipment Used:</a> <?= $exercise->equipment ?>
                        </div>
                  </div>
                </div>
            <?php
            }
            ?>

Моя панель поиска работает отлично, поэтому я не отображал HTML для нее. Я новичок, поэтому я не уверен, в чем я ошибся, я не уверен, что могу иметь два оператора выполнения PDO под одной и той же переменной имени.

Любая помощь или советы будут оценены

ОБНОВЛЕНИЕ: один флажок теперь будет отображать всю соответствующую информацию (без контрольного списка []), но он не работает для двух из них (я думаю, мне нужен контрольный список [], чтобы заставить эти два работать) так что мой новый вопрос, как мне сделать так, чтобы:

$ search = '%'. $ searchTerm. '%';

отображает больше, чем один searchTerm

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

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

Поскольку вы используете контрольный список [] (который является массивом) в вашей форме, вы получитев цикл, чтобы получить значения:

     else if (isset($_POST['checklist'])) {

     $searchArray = $_POST['checklist'];

     foreach ($searchArray as $searchTerm)
      { 
         $search = '%' . $searchTerm . '%';
         $stmt = $conn->prepare($sqlBrowse);
         $stmt->bindParam(":findInEquipment", $search);
         $stmt->execute();
         $exercises = $stmt->fetchAll();
      }     
}  
0 голосов
/ 27 июня 2019

Я полагаю, вы хотите, чтобы форма отправлялась обратно, когда пользователь установил флажок?Если так, добавьте событие щелчка к флажкам, которые публикуют форму, например,

<input type="checkbox" name="checklist[]" class="check" onclick='document.forms[0].submit();' value="Dumbell"> Dumbbell<br>
   <input type="checkbox" name="checklist[]" class="check" onclick='document.forms[0].submit();'  value="kettlebell"> Kettlebell<br>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...