2016-07-26 49 views
0

我有一个存储student_name和CLASS_NAME如何进一步筛选搜索步骤的结果?

student_id | student_name | class_name 
    1  |  John |  1 
    2  |  Herry |  2 
    3  |  Peter |  1 
    4  |  Tom |  2 

我创建了一个表格在数据库中搜索学生姓名如下表student_tb:

<form style="text-align: center;" method='POST'> 
    <input type="text" name='input_text' id='input_text' placeholder="Input text to search" required> 
    <button type="submit" name='search' value="search" ">Search</button> 
</form> 

<div class="container" style="text-align: center;"> 
    <?php 
    if(isset($_POST['search'])){ 
    $sql = "SELECT * FROM student_tb WHERE student_name LIKE '%".$_POST['input_text']."%' "; 
    $result = mysqli_query($conn, $sql); 
    while($row = mysqli_fetch_assoc($result)){?> 
     <ul> 
      <li><h3><?php echo $row["student_name"] . $row["class_name"]; ?></h3></li>    
     </ul> 
    <?php }}?> 
</div> 

假设,我将增加两个复选框,其用于进一步过滤搜索步骤的结果。当我点击复选框时,你能指导我如何实现它吗?例如,我输入'T',搜索结果为Peter 1Tom 2。在那之后,我点击复选框class 1,结果只剩彼得1.谢谢你这么多

<div id="filter" style="text-align: center;"> 
<input type="checkbox" id="class1" name="class1" value="class1"> 
    <label for="class1">Class 1</label> 
<input type="checkbox" id="class2" name="class2"> 
    <label for="class2">Class2</label> 
</div> 

回答

1

简单地定义这些复选框为阵列(name="class[]"),给他们一个平等的价值观,以您的CLASS_NAME ID和检查他们同时建设您的SQL查询:

<form style="text-align: center;" method='POST'> 
    <input type="text" name='input_text' id='input_text' placeholder="Input text to search" required> 
    <div id="filter" style="text-align: center;"> 
     <input type="checkbox" id="class1" name="class[]" value="1"> 
     <label for="class1">Class 1</label> 
     <input type="checkbox" id="class2" name="class[]" value="2"> 
     <label for="class2">Class2</label> 
    </div> 
    <button type="submit" name="search" value="search">Search</button> 
</form> 

<div class="container" style="text-align: center;"> 
    <?php 
     if (isset($_POST['search'])) { 
      dump($_POST); 
      $sql = "SELECT * FROM student_tb WHERE student_name LIKE '%" . $_POST['input_text'] . "%' "; 
      if(isset($_POST['class'])) { 
       foreach ($_POST['class'] AS $k => $v) { 
        if ($k == 0) { 
         $sql .= " AND (class_name = " . $v; 
        } else { 
         $sql .= " OR class_name = " . $v; 
        } 
       } 
       $sql .= ")"; 
      } 
      $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
      while ($row = mysqli_fetch_assoc($result)) { 
       ?> 
       <ul> 
        <li><h3><?php echo $row["student_name"] . $row["class_name"]; ?></h3></li> 
       </ul> 
      <?php } 
     } ?> 
</div> 

内置SQL查询:

SELECT 
    * 
FROM 
    student_tb 
WHERE 
    student_name LIKE '%T%' 
    AND (class_name = 1 OR class_name = 2) 

请注意,如果您发送不止一个复选框,你必须将它们与OR子句结合起来,以正确地过滤数据。

UPDATE:这里是脚本(HTML & PHP)与能力:通过串

  • 搜索;

  • 将自动提交应用复选框过滤器;

  • 保留提交后的所有值;

  • 重置表单;


<form name="searchForm" method="post"> 
    <input type="hidden" name="formSubmit" value="1"> 
    <input 
     type="text" 
     name='input_text' 
     id='input_text' 
     placeholder="Input text to search" 
     required 
     value="<?php if (isset($_POST['input_text'])) echo $_POST['input_text'] ?>"> 
    <div id="filter"> 
     <input 
      type="checkbox" 
      id="class1" 
      name="class[0]" 
      value="1" 
      onclick="this.form.submit()" <?php if (isset($_POST['class'][0])) echo $_POST['class'][0] ? 'checked' : ''; ?>> 
     <label for="class1">Class 1</label> 
     <input 
      type="checkbox" 
      id="class2" 
      name="class[1]" 
      value="2" 
      onclick="this.form.submit()" <?php if (isset($_POST['class'][1])) echo $_POST['class'][1] ? 'checked' : ''; ?>> 
     <label for="class2">Class2</label> 
    </div> 
    <button type="submit" name="search" value="search">Search</button> 
    <button type="reset" name="reset" value="reset" onclick="window.location.href = '<?php echo $_SERVER['PHP_SELF']; ?>'">Reset</button> 
</form> 

<div class="container"> 
    <?php 
     if (isset($_POST['formSubmit'])) { 
      dump($_POST); 
      $sql = "SELECT * FROM student_tb WHERE student_name LIKE '%" . $_POST['input_text'] . "%' "; 
      if (isset($_POST['class'])) { 
       $c = 0; 
       $sql .= " AND ("; 
        foreach ($_POST['class'] AS $k => $v) { 
         if($c == 0) $sql .= "class_name = " . $v; 
         else  $sql .= " OR class_name = " . $v; 
         $c++; 
        } 
       $sql .= ")"; 
      } 
      $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
      while ($row = mysqli_fetch_assoc($result)) { 
       ?> 
       <ul> 
        <li><h3><?php echo $row["student_name"] . $row["class_name"]; ?></h3></li> 
       </ul> 
      <?php } 
     } ?> 
</div> 

的变化是有点静态的,可以肯定地得到改善,但你会得到的想法。

+0

谢谢。如果我选中一个框并进行搜索,它效果很好。但是,如果我没有检查任何框并插入文本进行搜索。它有一个小错误,如下所示:(注意:未定义的索引:第26行的index.php中的类012,警告:在第26行的index.php中为foreach()提供的无效参数 警告:mysqli_fetch_assoc()期望参数1为mysqli_result,在第35行的index.php中给出的布尔值)....在这种情况下,搜索过程只是做WHERE student_name LIKE'%“。$ _POST ['input_text']。”%'“ – user3051460

+0

是的,我们需要检查是否有任何复选框作为POST参数传递 - 检查更新后的脚本 – mitkosoft

+0

谢谢,我明白了,它确实代码简单易懂,我只想问你一个问题。现场展示?例如,当我点击复选框时,过滤结果会显示1 – user3051460