2017-08-04 47 views
0

と私はテーブルの行で検索するには、このコードを書いた:私はページ0でいる時検索PHP/MySQLは改ページ

<div class="container mx-auto"> 
    <!--Add class table-responsive for responsive table --> 
    <div class="row"> 
     <div class="col-md-6"> 
      <form method="post"> 
      <div class="input-group"> 
       <input type="text" class="form-control" placeholder="Search for..." name="searchValue"> 
       <span class="input-group-btn"> 
        <button class="btn btn-secondary" name='search' type="submit"><i class="fa fa-search"></i></button> 
       </span> 
      </div> 
      </form> 
     </div> 
    </div> 

    <table class="table mx-auto" id="'table"> 
     <thead> 
     <tr> 
      <th>Name</th> 
      <th>Surname</th> 
      <th>Email</th> 
      <th>Phone</th> 
      <th>Company</th> 
      <th>More</th> 

     </tr> 
     </thead> 
     <tbody> 
     <?php 
     $page_max = 8; 
     if (isset($_POST['search'])){ 
      $search = $_POST['searchValue']; 

      $entriesInDatabase = $database->getData("SELECT count(id) FROM customers WHERE name LIKE '%$search%'"); 
      $numberOfPages = ceil($entriesInDatabase['count(id)']/$page_max); 
      $numberOfRecords = $page_max; 
      if(isset($_GET['page'])) { 
       $page = $_GET['page']; 
       $start = $page * $page_max; 
      } 
      else{ 
       $page = 0; 
       $start = $page * $page_max; 

      } 
      $customers = $database->getUsers("SELECT * FROM customers WHERE name LIKE '%$search%' LIMIT $start, $numberOfRecords"); 
     } 
     else{ 
      $entriesInDatabase = $database->getData("SELECT count(id) FROM customers"); 
      $numberOfPages = ceil($entriesInDatabase['count(id)']/$page_max); 
      $numberOfRecords = $page_max; 
      if(isset($_GET['page'])) { 
       $page = $_GET['page']; 
       $start = $page * $page_max; 
      } 
      else{ 
       $page = 0; 
       $start = $page * $page_max; 

      } 
      $customers = $database->getUsers("SELECT * FROM customers LIMIT $start, $numberOfRecords"); 
     } 





     foreach($customers as $customer){ 
      $name = $customer ['name']; 
      $surname = $customer['surname']; 
      $email = $customer['email']; 
      $phone = $customer['phone']; 
      $company = $customer['company']; 
      $id = $customer['id']; 
      echo "<tr> 
        <td>$name</td> 
        <td>$surname</td> 
        <td>$email</td> 
        <td>$phone</td> 
        <td>$company</td> 
        <td><a href='customerInfo.php?id=$id' class='btn btn-sm btn-info'><i class='fa fa-info'></i></a></td> 



        </tr>"; 
     } 
     ?> 
</tbody> 
</table> 
    <ul class="pagination"> 
<?php 

if(isset($_GET['page']) && $_GET['page'] > 0){ 
    $previous = $_GET['page'] - 1; 
    echo '<li class="page-item"><a class="page-link" href="?page='. $previous.'">Previous</a></li>'; 
} 


for($i = 0; $i < $numberOfPages; $i++){ 
    echo '<li class="page-item"><a class="page-link" href="?page='. $i . '">'. $i. '</a></li>'; 
} 
    if(isset($_GET['page']) && $_GET['page'] < $numberOfPages - 1){ 
     $page = $_GET['page']; 
     $next = $page + 1; 
     echo '<li class="page-item"><a class="page-link" href="?page='.$next.'">Next</a></li> '; 
    } 
    elseif(!isset($_GET['page'])){ 
     echo '<li class="page-item"><a class="page-link" href="?page=1">Next</a></li> '; 
    } 
?> 



    </ul> 
</div> 

検索が正常に動作しますが、私は2ページでいる時、私だけですることができますそのページのレコードを検索します(これは私のクエリの制限のためだと思います)。それ以外に、 'A'を検索すると7ページが返されますが、セコンドページをクリックすると検索結果は読み込まれません2ページの顧客とのメインリスト

誰でも私がこれらの問題を解決するのに役立つでしょうか?

答えて

0

まずはあなたの入力を害します。データベース問合せでPOSTまたはGETを使用すると、非常に危険です。

第2の:DRYの場合、おそらく使用しているコードの半分でこれを行うことができます。

あなたが検索を「失う」理由は、ページネーションが検索語を引き継がないためです。

は、改ページ内のリンクにそれを追加し、GETするPOSTから切り替える:私が代わりにPOSTの$_GET['searchValue']を使用

<?php 
$searchString = ''; 
if($_GET['searchValue']){ 
    $searchString = '&searchValue=' . $_GET['searchValue']; 
} 

if(isset($_GET['page']) && $_GET['page'] > 0){ 
    $previous = $_GET['page'] - 1; 
echo '<li class="page-item"><a class="page-link" href="?page='. $previous.$searchString.'">Previous</a></li>'; 
} 
// more code 
'... href="?page='.$i.$searchString'" ...' 

'... href="?page='.$next.$searchString'" ...' 

注意。ほとんどの場合、検索にPOSTを使用する利点はありません(GETを使用すると、Google Analytics f.exでそれを追跡できます)。だから、あなたのフォームメソッドをif (isset($_POST['search'])){から$_GET['searchValue']に変更してください。 POSTを使用することを主張する場合は、$_REQUESTを使用できます。これにはGETとPOSTの値が入ります。