1

こんにちは、私は新しいプログラマーです。

私は正常に動作する単純なページネーションを持っています.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=$orderを追加しましたが、ページネーションは現在機能しておらず、デフォルトのレコードセットの結果でもソートされたレコードセットの結果でも機能していません。

私が間違っていることを見てください

4

1 に答える 1

0

コード全体を読んだわけではありませんが、クエリ文字列に少なくとも 1 つのエラーがあります。各 GET パラメータは、「,」ではなく「&」で区切る必要があります。コードの変更

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

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

少なくともこのエラーを修正する必要があります。

error_reporting(E_ALL); を入れる必要があります。コードの先頭に php からの通知を表示します (これは非常に役に立ちます)。その後もまだ機能しない場合は、GET パラメータを次のようにデバッグする必要があります。

<?php var_dump($_GET); ?>
于 2012-05-27T13:20:45.577 に答える