2016-11-10 8 views
2

データベースに10個以上の項目がある場合、ページングするように検索結果を取得しようとしています。何らかの理由で、コードが10個以上の項目を認識して後続ページのリンクを作成しても、すべての検索結果が最初のページにのみ表示されます。誰でもお手伝いできますか?コードは以下の通りです:PHP - 検索結果が改ページされていません

for($i = 0; $i < $terms_count; $i++) 
{ 
    $search_terms_array[$i] = trim($search_terms_array[$i]); 
    ${"query".$i} = $this->mysqli_link->query("SELECT prod_id, prod_tags FROM table WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'"); 
    if(${"query".$i}->num_rows < 1) 
    { 
     $zerocount++; 
    } 
    else 
    { 
     $rows = array(); 
     while($row = ${"query".$i}->fetch_array()) 
     { 
      $rows[] = $row; 
     } 
     foreach($rows as $row) 
     { 
      $search_id_results[] = $row['prod_id']; 
     } 
    } 
} 
if($zerocount == $terms_count) 
{ 
    echo $this->err_handle->fetch_error_text("search_terms_0_results"); 
    return; 
} 
else 
{ 
    $search_results = array_values(array_unique($search_id_results)); 
    $search_results_count = count($search_results); 
    $search_page_count = ceil($search_results_count/10); 
    $search_page_first_result = ($search_page - 1) * 10; 
    echo '<p>Go to page: '; 
    for($i = 1; $i <= $search_page_count; $i++) 
    { 
     if($i == $search_page) 
     { 
      echo "&nbsp;<strong>" . $i . "</strong>"; 
     } 
     else 
     { 
      echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>'; 
     } 
    } 
    echo '</p><p>&nbsp;</p><p>&nbsp;</p>'; 
    for($i = 0; $i < $search_results_count; $i++) 
    { 
     $query = $this->mysqli_link->query("SELECT * FROM table WHERE prod_id='" . $search_results[$i] . "' LIMIT " . $search_page_first_result . ", 10"); 
     while($row = $query->fetch_array()) 
     { 
     echo "<h4><a href=\"index.php?section=products&amp;subsection=" . $row['prod_category'] . "&amp;prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h4></a><p><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\" width=\"150\" height=\"200\" /></p><p>Price: £" . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p><input type=\"number\" name=\"prod_qty\" maxlength=\"2\" /><input type=\"submit\" name=\"add_to_basket\" value=\"Add To Basket\" /></form></p><p>&nbsp;</p><p>&nbsp;</p>"; 
     } 
    } 
    echo '<p>Go to page: '; 
    for($i = 1; $i <= $search_page_count; $i++) 
    { 
     if($i == $search_page) 
     { 
      echo "&nbsp;<strong>" . $i . "</strong>"; 
     } 
     else 
     { 
      echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>'; 
     } 
    } 
    echo '</p><p>&nbsp;</p><p>&nbsp;</p>'; 
} 
+1

私はあなたの検索に威力を発揮する同じクエリが、同じカウントを得るように、ページネーション要求にパワーを与えるべきだと思います。このようにすべてが同期しています。あなたは思いませんか? –

+0

@ mueyiwa-moses-ikomiええ、それは私が '$ {"クエリ "$ i} = $ this-> mysqli_link->クエリ(" SELECT prod_id、prod_tags FROM table where prod_tags $ search_terms_array [$ i]。 "% 'LIMIT"。$ search_page_first_result。 "、10"); '最初の10個の結果だけが返され、ページングされません。 –

+0

ページングの場合は、最初にカウントを取得し、それをあなたの限界値と比較する必要があります。あなたのクエリがあなたの限界よりも大きな数を返した場合、ページされるコンテンツがあります。あなたは今理解していますか?それに、あなたのスクリプトは定期的なページ設定で動作しますか? –

答えて

0

[OK]をので、私は、この問題に対する解決策を見つけ、次のように完全な機能は以下のようになります。

public function product_search($search_terms, $search_page, $search_flag_check) 
{ 
    if($search_flag_check == "invalid") 
    { 
     echo $this->err_handle->fetch_error_text("invalid_ns_term"); 
     return; 
    } 
    if($search_terms == "") 
    { 
     echo $this->err_handle->fetch_error_text("no_search_string"); 
     return; 
    } 
    $search_terms = htmlspecialchars($search_terms); 
    $search_terms = $this->mysqli_link->real_escape_string(filter_var($search_terms, FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_FLAG_NO_ENCODE_QUOTES)); 
    $search_terms_array = explode(" ", $search_terms); 
    $terms_count = count($search_terms_array); 
    $zerocount = 0; 
    $search_id_results = array(); 
    for($i = 0; $i < $terms_count; $i++) 
    { 
     $search_terms_array[$i] = trim($search_terms_array[$i]); 
     ${"query".$i} = $this->mysqli_link->query("SELECT prod_id, prod_tags FROM table WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'"); 
     if(${"query".$i}->num_rows < 1) 
     { 
      $zerocount++; 
     } 
     else 
     { 
      $rows = array(); 
      while($row = ${"query".$i}->fetch_array()) 
      { 
       $rows[] = $row; 
      } 
      foreach($rows as $row) 
      { 
       $search_id_results[] = $row['prod_id']; 
      } 
     } 
    } 
    if($zerocount == $terms_count) 
    { 
     echo $this->err_handle->fetch_error_text("search_terms_0_results"); 
     return; 
    } 
    else 
    { 
     $search_results = array_values(array_unique($search_id_results)); 
     $search_results_count = count($search_results); 
     $search_page_count = ceil($search_results_count/10); 
     $search_page_first_result = ($search_page - 1) * 10; 
     $search_page_results_limit = 10; 
     if($search_page_first_result < 1) 
     { 
      $search_page_first_result = 1; 
     } 
     echo '<p>Go to page: '; 
     for($i = 1; $i <= $search_page_count; $i++) 
     { 
      if($i == $search_page) 
      { 
       echo "&nbsp;<strong>" . $i . "</strong>"; 
      } 
      else 
      { 
       echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>'; 
      } 
     } 
     echo '</p><p>&nbsp;</p><p>&nbsp;</p>'; 
     $search_page_upper_limit = $search_page_first_result + 9; 
     if(array_key_exists($search_page_upper_limit, $search_results)) 
     { 
      $search_results_limit = $search_page_first_result + $search_page_results_limit; 
     } 
     else 
     { 
      end($search_results); 
      $search_results_limit = key($search_results); 
      reset($search_results); 
     } 
     for($i = $search_page_first_result; $i <= $search_results_limit; $i++) 
     { 
      $query2 = $this->mysqli_link->query("SELECT * FROM table WHERE prod_id='" . $search_results[$i] . "'"); 
      $row = $query2->fetch_array(); 

      echo "<h4><a href=\"index.php?section=products&amp;subsection=" . $row['prod_category'] . "&amp;prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h4></a><p><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\" width=\"150\" height=\"200\" /></p><p>Price: £" . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p><input type=\"number\" name=\"prod_qty\" maxlength=\"2\" /><input type=\"submit\" name=\"add_to_basket\" value=\"Add To Basket\" /></form></p><p>&nbsp;</p><p>&nbsp;</p>"; 

     } 
     echo '<p>Go to page: '; 
     for($i = 1; $i <= $search_page_count; $i++) 
     { 
      if($i == $search_page) 
      { 
       echo "&nbsp;<strong>" . $i . "</strong>"; 
      } 
      else 
      { 
       echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>'; 
      } 
     } 
     echo '</p><p>&nbsp;</p><p>&nbsp;</p>'; 
    } 
} 

それは思考のビットを取って、私はあきらめるとしていました、しかし、配列キーを使って各検索ページの制限を計算し、関連するPHP配列関数をグーグルで検索したところ、すべてがかなりうまく収まったと思った。 私はこのコードが今はあまり整頓されていない可能性があることを理解しています。

関連する問題