SQL Checkbox搜索,显示我数据库中的项目列表

时间:2019-06-27 03:54:33

标签: php html sql pdo

我正在建立一个目录页面,根据通过文本字段(有效)和/或复选框(无效)搜索的内容显示不同的锻炼内容

我不知道没有提交按钮是否可行,但我希望它可以搜索项目以及让它搜索多个复选框

我尝试在互联网上寻求帮助,但找不到与我的项目相关的任何内容。

$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 execute语句。

任何帮助或提示将不胜感激

更新:现在,一个复选框将显示所有相关信息(不包括checklist []),但不适用于其中两个(我相信我需要使用checklist []才能使这两个都起作用) 所以我的新问题是,如何做到这一点:

$ search ='%'。 $ searchTerm。 '%';

显示的搜索字词多于一个搜索字词

2 个答案:

答案 0 :(得分:0)

我假设您希望表单在用户选中复选框时回发?如果是这样,请将click事件添加到发布表单的复选框中,例如

<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>

答案 1 :(得分:0)

对于数组到字符串的转换错误,是由于表单字段中的清单属性。

当您在表单中使用清单[](这是一个数组)时,您将不得不循环获取值:

     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();
      }     
}