2016-07-26 5 views
0

ich einen Tisch student_tb haben, die student_name und class_nameWie kann das Ergebnis des Suchschritts weiter gefiltert werden?

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

ich ein Formular speichert erstellt Studentennamen in der Datenbank zu suchen, wie folgt:

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

dass Angenommen, werde ich zwei Kontrollkästchen hinzufügen, die werden verwendet, um das Ergebnis des Suchschritts weiter zu filtern. Könnten Sie mir zeigen, wie ich es implementieren kann, wenn ich auf das Kontrollkästchen klicke? Zum Beispiel gebe ich 'T' ein, das Suchergebnis ist Peter 1 und Tom 2. Danach hat ich das Kontrollkästchen klicken, um sie class 1, das Ergebnis nur noch Peter 1. Vielen Dank

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

Antwort

1

definieren einfach dieses Kontrollkästchen als Array (name="class[]"), gibt ihnen eine Wert gleich Ihre class_name IDs und prüfen Sie beim Aufbau Ihre SQL-Abfrage:

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

Built SQL-Abfrage:

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

Beachten Sie, dass, wenn Sie mehr als eine Checkbox senden, müssen Sie Kombiniere sie mit der OR-Klausel, um Daten richtig zu filtern.

UPDATE: Hier ist das Skript (HTML & PHP) mit der Fähigkeit zu:

  • Suche nach string;

  • Checkbox-Filter mit automatischem Senden anwenden;

  • um alle Werte nach dem Senden zu behalten;

  • Formular zurücksetzen;


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

Die Änderung ist ein bisschen statisch und kann sicher verbessert werden, aber Sie werden die Idee.

+0

Danke. Es hat gut funktioniert, wenn ich eine Box ankreuze und suche. Wenn ich jedoch keine Box ankreuzen und Text zur Suche einfügen würde. Es hat einen kleinen Fehler wie folgt: (Hinweis: Undefinierter Index: Klasse in index.php in Zeile 26 Warnung: Ungültige Argument für foreach() in index.php in Zeile 26 Warnung: mysqli_fetch_assoc() erwartet Parameter 1 zu sein mysqli_result, boolean gegeben in index.php in Zeile 35) .... In diesem Fall, den Suchvorgang tun nur WHERE student_name LIKE '% ". $ _POST [' Eingabetext ']."%' " – user3051460

+0

Ja, mein Fräulein, wir müssen überprüfen, ob ein beliebiges Kontrollkästchen als POST-Parameter übergeben wird - aktualisiere Skript überprüfen – mitkosoft

+0

Vielen Dank, ich habe es. Es ist wirklich kurzer Code und leicht zu verstehen. Ich möchte nur noch eine Frage stellen. Ist es möglich zu machen Eine Live-Show? Zum Beispiel wird das Filterergebnis angezeigt, wenn ich auf das Kontrollkästchen 1 – user3051460

Verwandte Themen