2016-07-26 7 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> 

は、私はその2つのチェックボックスを追加する、と仮定探索ステップからの結果をさらにフィルタリングするために使用される。チェックボックスをクリックして実装する方法を教えてください。たとえば、「T」と入力すると、検索結果はPeter 1およびTom 2になります。その後、私はチェックボックスclass 1をクリックして、結果だけで構築しながら簡単に、配列(name="class[]")としてこれらのチェックボックスを定義し、それらをあなたのCLASS_NAME IDのと等しい値を与え、それらをチェックピーター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

ありがとうままあなたの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のクラス 警告:26行目のindex.phpでforeach()に無効な引数が指定されました 警告:mysqli_fetch_assoc()は、パラメータ1が$ _POST ['input_text']。 "%" " – user3051460

+0

はい、私のミスは、 POSTパラメータとしてチェックボックスが渡されていることを確認する必要があります。 – mitkosoft

+0

本当に短いコードで分かりやすいです。ライブの表示?例えば、チェックボックスをクリックすると、フィルタリングの結果が表示されます。1 – user3051460

関連する問題