1

同様の質問を検索しましたが、役に立たなかったので、誰かが助けてくれることを願っています。

Zend Framework (1.12) を使用して構築したサイトで、検索結果のページネーションに問題があります。アイテムを取得でき、ページネーションも形成されますが、クリックしてページネーションの次のページに移動すると、すべての検索結果が失われます。コードは ?page=2 などを URL に追加しますが、コードは検索項目を失います。

特にセッションまたは Zend_Session を使用する可能性について 1 つの質問を読みましたが、現時点では少し迷っています! PHPは比較的新しいです。

まず、ここに私の検索フォームがあります - search-form.php (XHTML)

<?php
// Search Form
?>
<div id="search">
    <h4 style="margin-bottom:20px;">Search</h4>
    <form name="prodSearch" action="listing-search.php" method="post">
        <input type="text" name="searchitems" id="searchitems" />
        <input type="submit" name="search_items" id="search_items" value="Go" />
    </form>
</div>

これは私の他のページに含まれています。この場合、listing-search.php は次のようになります。

<?php 
require_once('admin/scripts/library.php');
require_once('admin/scripts/db_definitions.php');
try {
?>
<!-- HTML Doc Type, Head removed e.t.c -->
<div id="listing-col-main">
<div id="all-cars">
  <h4>Search Results</h4>
</div>
<!-- Listings -->
<?php
    $query = $_POST['searchitems'];
    $min_length = 3;
    if (strlen($query) >= $min_length) {
        $query = htmlspecialchars($query);
        $query = mysql_real_escape_string($query);
        $raw = searchItems($dbread, $query);  
        $paginator = Zend_Paginator::factory($raw);
            if (isset($_GET['page'])) {
                $paginator->setCurrentPageNumber($_GET['page']);
            }
            $paginator->setItemCountPerPage(8);
            $paginator->setPageRange(3); 
            $count = $paginator->getTotalItemCount();
            if ($count > 0) {         
              foreach ($paginator as $results) { // repeat all results ?>
<?php 
              $item_id = $results['item_id'];
              $photos = getRelatedPhotos2($dbread, $item_id);
              ?>
<div class="product-listing">
  <div class="product-listing-image">
    <?php foreach ($photos as $photo) { //repeat ?>
    <img src="image_upload/<?php echo $photo['filename']; ?>" width="75" alt="" />
    <?php } ?>
  </div>
  <div class="product-listing-title">
    <h4><?php echo $results['type_name']; ?> - <?php echo $results['item_make'] . ' ' . $results['item_model']; ?> </h4>
  </div>
  <div class="product-listing-details">
    <p>YEAR: <?php echo $results['item_year']; ?> FUEL: <?php echo $results['item_fuel']; ?> TRANS: <?php echo $results['item_transmission']; ?> MILEAGE: <?php echo $results['item_mileage']; ?> </p>
  </div>
  <div class="product-listing-viewmore"><a href="itempage.php?item_id=<?php echo $results['item_id']; ?>">More Info</a></div>
</div>
<?php } ?>
<!-- 8 products per page -->
<div id="product-listing-pagination">
  <?php
  $pages = $paginator->getPages('Elastic');
  if (isset($pages->previous)) {
echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $pages->previous . '">Prev</a>';
  }
  foreach ($pages->pagesInRange as $page) {
if ($page != $pages->current) {
    echo " <a href='" . $_SERVER['PHP_SELF'] . "?page={$page}'>$page</a>";
}   else {
    echo ' ' . $page;
}
   }
   if (isset($pages->next)) {
echo ' <a href="' . $_SERVER['PHP_SELF'] . '?page=' . $pages->next . '">Next</a>';
   }

  ?>
</div>
<?php } else { ?>
<div id="noresults"> <?php echo "No results found for " . $query; ?> </div>
<?php }
    } ?>
</div>
<div id="col-right">
<?php include("search-usedcars.php"); ?>
<!-- End of Main Search -->
<div id="latest-news">
  <h3>Latest News</h3>
  <?php include("latestnews.php"); ?>
</div>
 </div>
 <div class="clear"></div>
 <div id="footer-bar"> <a href="#">Designed by</a> </div>
 </div>
 </body>
</html>
<?php 
} catch (Exception $e) {
echo $e->getMessage();
}
?>
4

1 に答える 1

0

これは、クエリが $_POST に渡されるためです。ナビゲーション リンクをクリックすると、$_POST に保存されているデータが失われ、$_GET にあるものだけが保持されます。検索フォーム メソッドを $_GET に変更&searchitems="'.$query.'"して両方のナビゲーション リンクに追加するか、クエリを $_SESSION に保存するか、メソッド post を使用してナビゲーション リンクをフォームにラップされたボタンに変更し、 および の非表示フィールドを含めることができsearchitemsますpage。検索フォームのメソッドを get に変更することをお勧めします。これにより、検索のブックマークが可能になり、複雑さが回避されます。

于 2013-03-27T21:04:55.490 に答える