2012-05-26 34 views
1

我試圖致電查詢中使用Zend_Paginate()加載基於一個GET搜索字符串頁上的查詢主要執行以下操作:當通過所謂PHP是Zend_Paginator對MySQL查詢使用GET

SELECT * FROM table WHERE column LIKE '%searchstring%' OR alt_column LIKE '%searchstring%'; 

的查詢工作正常搜索/提交文本形式,並試圖進入下一個頁面程序轉儲我回PAGINATE備用網址(用於錯誤或沒有頁面顯示),然而,當URL返回類似的東西

URLINK.php?search=searchstring 

- 希望這最後一行是有道理的,它是遲到的我正在盡力用透明度來輸入。

什麼是當使用分頁對URL.php?search=searchstring

多一點在調用URL中使用的變量

//search query 
$search = searchQuery('search', 'list_sql_rows.php'); 
$results - searchTable($dbRead, $search); 

搜索方法上面的順序如下

if(isset($_POST['submit_search'])) { $searchstring = $_POST['searchstring']; 
if($searchstring) { header('Location: results.php?search=' . $searchstring); } } 
最好的方法是什麼?

這一點效果很好,但是當我嘗試用paginator調用results.php?page=2時,系統會將我恢復到回退URL如上所述的。任何想法/意見表示讚賞。

只是爲了澄清一個搜索欄/表格從search.php中頁面通過$_POST & & $_GET發送$searchstring到results.php頁面故障安全。 get方法在URL標題中發送$searchstring,以便搜索DO的結果在第一頁上工作results.php?search = $ searchstring。這工作得很好。分頁似乎失去了$searchstring,我不知道這是否是由於$_POST/$_GET損失分頁程序開始時,「PAGINATE」返回URL results.php?頁= 2如此看來$_GET不得成爲選擇的方法?

UPDATE 在寫軌道現在分頁作品它是我的鏈接結構被打破。 _results_samples.php?搜索=羅伯特&頁= 4_將使用這個詞的分頁結果的事實返回頁面4 ROBERT

溶液ROCKYFORD FOUND VIA變種建議首先 變異推薦的方法堅持$searchstring 變化進行分頁鏈接如下圖所示

<a href='" . $_SERVER['PHP_SELF'] . "?search=" . $searchstring . "&page={$page}'>$page</a> 

回答

1

,你需要確保你保持請求之間的查詢字符串,用澤nd_Session_Namespace或Zend_registry。

每當Zend_Paginator使用DbTableSelect或DbSelect適配器加載頁面時,它必須用查詢命中db,它只是更改限制選項。

或者您可以將整個查詢結果轉儲到Zend_Paginator_Adapter_Array中,並且它將通過該數組翻頁。

[編輯]
你將不得不保留請求之間的查詢字符串好歹所以你可以把它放回URL字符串,我通常使用合適的詞彙,但後來我用了整個MVC堆棧。你似乎沒有使用整個堆棧,所以你需要另一種方法,可能$ _SESSION會起作用。我相信還有很多其他方法來堅持這些數據。

P.S.你沒有提到你正在使用哪個適配器,所以我正在做一些假設。

[編輯] 個人而言,我總是用這個$ _ POST時可能避免這一切,似乎只是有這個問題,$ _GET。

+0

搜索查詢運行使用Zend_Db_Adapter_Mysqli()和使用中的分頁程序是Zend_Paginator的工廠::() – sandovalg

+0

使用的搜索查詢現在工作的建議變體,不得不_persist_在$搜索字符串變量,現在頁的分頁他們應該的方式。非常感謝RockyFord! – sandovalg

2

下面是使用分頁的正確的例子:在動作方法 :

$select = $clients->getAll();        
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select)); 
$paginator->setCurrentPageNumber($this->_getParam('page')); 
$paginator->setItemCountPerPage(20); 
$this->view->clients = $paginator; 
在視圖代碼

<?php if (count($this->clients) > 0): ?> 
... 
    <?php echo $this->paginationControl($this->clients, 'Sliding', 'partials/paginator.phtml'); ?> 
<?php else: ?> 
     <h3 class="notice">No registered clients found!</h3> 
<?php endif; ?> 

但是,即使你會失敗,這個變體,你總是可以嘗試構建自己的組件,Zend只會幫助我們解決一些任務。

+0

搜索查詢使用Zend_Db_Adapter_Mysqli()運行,並且正在使用的分頁器是Zend_Paginator :: factory() – sandovalg

+0

我有一個已經在常規 - > fetchAll()使用的變體。這工作正常;不過,我現在試圖通過一個簡單的搜索字段來使用GET/form首頁顯示後續頁面不顯示。似乎我失去了搜索字符串與GET方法,如果不止一個頁面存在。 – sandovalg