2012-05-27 70 views
1

嗨,我是一個新的程序員。PHP-Modifing分頁排序

我有一個簡單分頁工作正常, 我已經排序選擇通過ID,標題等,這也是工作正常排序我的記錄結果,代碼如下所示。

現在我想結合了兩個並具有分頁功能應該在兩種條件下工作。

即當默認顯示記錄集結果時,分頁應該像以前一樣工作。 當記錄集結果按選項排序時,分頁也應該對排序結果起作用。

我得到了一些想法,代碼在下面,但我無法得到它的工作。

我的記錄和基本分頁,排序的代碼是:

<?php 
$table='mytable'; 
$pagename = "is-test.php"; 
$db = mysql_select_db($database,$connection) or trigger_error("SQL", E_USER_ERROR); 
$sql1 = "SELECT COUNT(*) FROM $table"; 
$result1 = mysql_query($sql1, $connection) or trigger_error("SQL", E_USER_ERROR); 
$row = mysql_fetch_row($result1); 
$numrows = $row[0]; 
$rowsperpage = 5; 
$totalpages = ceil($numrows/$rowsperpage); 
if (isset($_GET['page']) && is_numeric($_GET['page'])) { 
$currentpage = (int) mysql_real_escape_string($_GET['page']); 
} else { 
$currentpage = 1; 
} 
if ($currentpage > $totalpages) { 
$currentpage = $totalpages; 
} 
if ($currentpage < 1) { 
$currentpage = 1; 
} 
$orderBy = array('id', 'title',); 
$order = ''; 
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) { 
$order = mysql_real_escape_string($_GET['orderBy']); 
}else{ 
$order='id'; 
} 
$offset = ($currentpage - 1) * $rowsperpage; 
$sql2 = "SELECT * FROM $table ORDER BY $order ASC LIMIT $offset, $rowsperpage"; 
$result2 = mysql_query($sql2, $connection) or trigger_error("SQL", E_USER_ERROR); 
$list = mysql_fetch_assoc($result2); 
$startrow = ($currentpage-1) * $rowsperpage 

我的排序選項代碼:

  Sort by 
     <a href="?orderBy=id">id:</a>   

     <a href="?orderBy=title">title:</a> 

我對分頁代碼:

if ($currentpage != $totalpages) { 
$nextpage = $currentpage + 1; 
echo " <li><a href='$pagename?page=$nextpage'>Next&raquo;&raquo;</a></li> "; 
} 

if($currentpage<$totalpages){ 
for ($x = ($currentpage - 3); $x < (($currentpage + 3) + 1); $x++) { 
if (($x > 0) && ($x <= $totalpages)) { 
if ($x == $currentpage) { 
echo " <li id='pcurrent'><a href='$pagename?page=$x'>$x</a></li>"; 
} else { 
echo " <li><a href='$pagename?page=$x'>$x</a></li> "; 
}}} 
} 

if ($currentpage > 1){ 
$prevpage = $currentpage - 1; 
echo " <li><a href='$pagename?page=$prevpage'>&laquo;&laquo;Prev</a></li> "; 
} 

高達現在除了分頁之外,所有的東西都在工作,只分頁記錄集記錄集結果我必須要改變URL參數分頁對排序結果工作, 所以我改變了我的分頁鏈接爲

if ($currentpage != $totalpages) { 
$nextpage = $currentpage + 1; 
echo " <li><a href='$pagename?orderBy=$order,page=$nextpage'>Next&raquo;&raquo;</a></li> "; 
} 

if($currentpage<$totalpages){ 
for ($x = ($currentpage - 3); $x < (($currentpage + 3) + 1); $x++) { 
if (($x > 0) && ($x <= $totalpages)) { 
if ($x == $currentpage) { 
echo " <li id='pcurrent'><a href='$pagename?orderBy=$order,page=$x'>$x</a></li>"; 
} else { 
echo " <li><a href='$pagename?orderBy=$order,page=$x'>$x</a></li> "; 
}}} 
} 

if ($currentpage > 1){ 
$prevpage = $currentpage - 1; 
echo " <li><a href='$pagename?page=$prevpage'>&laquo;&laquo;Prev</a></li> "; 
} 

即加入ORDERBY = $爲了在分頁鏈接,但分頁現在沒有工作, 不在默認記錄集結果上,也不在排序記錄集結果上。

請看看我做錯了

回答

1

我沒有讀整個代碼,但你必須在你的查詢字符串至少有一個錯誤。每個GET參數應該用「&」而不是「,」分開,你做了什麼。從

'?orderBy=$order,page=$nextpage' 

更改您的代碼以

'?orderBy=$order&page=$nextpage' 

至少應該解決這個錯誤。

你應該把error_reporting(E_ALL);在你的代碼開始處看到來自php的通知(這會幫助你很多)。如果它仍然沒有工作之後,你應該調試你的GET參數

<?php var_dump($_GET); ?> 
+0

男人你是生命的救星..工作像魅力很多。 –

+0

也看上面有什麼方法來防止SQL注入我已經使用mysql_real_escape_string _GET是使它注入證明 –

+0

使用mysql_real_escape_string來逃避$命令絕對是一個好主意。在$頁上使用它是可選的,因爲你把它轉換爲整數 –