日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 5 » ページング処理について教えて下さい

ページング処理について教えて下さい

ページ: 1

投稿者 投稿
会員
登録者: 4 2009
返信数: 5
初めまして。
ページング処理で15件ずつで区切って表示したいと思っています。

しかし、次頁を押下しても同じレコードが表示されてしまいます。

$i<=$endlineの部分では$i=0、$endline=15となり次のページにすると$i=14、$endline=29とちゃんとなります。

初心者ながらに色々、試してみたのですが分からず困っています :'(
長いソースで大変恐縮ですがアドバイスを頂きたいと存じます。

よろしくお願い致します。
-----------------------------------------------------------
$maxline = 20;

$page = $HTTP_GET_VARS["page"];

if ($page < 1) {
$page = 1;
}
$startline = ($page - 1) * $maxline;

$endline = $page * $maxline -1;


$sql = "select * from db1 id DESC";
$r = odbc_exec($con, $sql);

$maxpage = ceil(odbc_num_rows($r) / $maxline);

$i=$startline;

while(odbc_fetch_array($r) and $i<=$endline){

$item1 = odbc_result($r, "id");
$item2 = odbc_result($r, "clm1");

?>
<form action="index.php" method="post">
<TR class="old">
<TD align="center">
<TD><?= $item1 ?></TD>
<TD><?= $item2 ?></TD>
</FORM>
<?
}
//$iに1を加算
$i = $i + 1;
}
//現在の頁/最終頁を表示
print("<caption valign='top' align='right'>Page ".$page."/".$maxpage."</caption>");

print("<caption align='bottom'>");

if ($page > 1) {
$i = $page - 1;

print("<a href='page.php?page=".$i ."'>前頁</a>");
}

if ($page <> 1 and $page <> $maxpage) {
print("・");
}
if ($page < $maxpage) {
$i = $page + 1;

print("<a href='page.php?page=".$i ."'>次頁</a>");
}
print("<br>");

for ($i=1;$i<=$maxpage;$i++) {

if ($i==$page){
print("[".$i."]");
} else {
print("<a href='page.php?page=".$i."'>$i</a>");
}
if ($i <> $maxpage) {
print("・");
}
?>
会員
登録者: 10 2007
返信数: 71
ソースを見てみますと、
(1) $iの値はちゃんと次のページの行を指している
(2) しかしそれとは関係なくデータは最初の行から読んでいる
といった感じになっているようです。

方法その1:
表示する行よりも前の行を先に読み飛ばしてしまう方法があります。この場合は
$i=$startline;
の行の代わりに、次の行で置き換えてみます。
for ( $i = 0; $i < $startline; $i ++ ) {
odbc_fetch_array($r);
}

方法その2:
マニュアルを読んだだけで試したことがないのですが、odbc_fetch_array()関数は、2つ目の引数で「どの行番号を取得するのかを任意で指定する。 」とありますので、表示する行を指定してデータを取得できそうです。この場合は
while(odbc_fetch_array($r) and $i<=$endline) {
の行を、次のように訂正してみます。
while(odbc_fetch_array($r, $i) and $i<=$endline) {

まずは方法その2のほうから試してみて下さい。
会員
登録者: 4 2009
返信数: 5
kona@mさん

ありがとうございます :)
完璧です!

「方法その2」でうまく表示できました。

なるほど。

odbc_fetch_array()関数は使用した事がなかったので勉強してみます。
また頂いた修正ソースを見て再度、自分なりに理解してみたいと思います。

またご質問させて頂く機会がありましたらどうぞよろしくお願い致します。

本当にありがとうございました!
« 最終編集者 Stama 日時 2009 年 4 月 23 日(木) 12:18. »

ページ: 1

日本PHPユーザ会 掲示板 » PHP 5 » ページング処理について教えて下さい

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています