プロが教えるわが家の防犯対策術!

お世話になります。PHP4とMysqlで検索システムを作っているのですが、「次の○件」は過去ログを利用してできたのですが「前の○件」がわかりません。「次の○件」の構文は以下のように書きました。

define ( 'PAGE_MAX', 10 );
$page = $_GET['page'];
if ( $page == "" ) {
$page = -1;}
// 総レコード数を取得
$sql = "select count(*) from test";
$result = mysql_query ( $sql );
$rec = mysql_fetch_array ( $result );
// 総レコード数
$recMax = $rec[0];
// 次のページで表示するレコードがあるか
if ( $recMax > PAGE_MAX * ($page+1) ) {
$page ++;
$link = "<a href=\"test.php?page=$page\">次の".PAGE_MAX."件";}
// 現在のページで表示するデータを取得
// 開始レコード位置
$start = $page * PAGE_MAX;
// 終了レコード位置
$max = PAGE_MAX;

$sql= "select * from test LIMIT $start,$max";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);

よろしくお願いします。

A 回答 (1件)

実は


・最初の○件
・次の○件
・前の○件
・最後の○件
・○ページ目を表示する
は、全部同じ処理です。

・最初の○件
「何件目から表示するか」を「1件目」にしてから処理する

・次の○件
「何件目から表示するか」を「今表示した件数 + 1件目」にしてから処理する

・前の○件
「何件目から表示するか」を「今表示した件数 - 1ページの表示件数」にしてから処理する

・最後の○件
「何件目から表示するか」を「全体の件数 - 1ページの表示件数」にしてから処理する

・○ページ目を表示する
「何件目から表示するか」を「1ページの表示件数 × ページ番号 + 1 - 1ページの表示件数」にしてから処理する

つまり、どの処理も「最初に、何件スキップするか」だけが違うのみで、後は全部同じ処理なのです。どのページを表示するにしても、毎回、クエリを実行します。

例えば、現在の表示結果が「41件目から60件目までの20件」だった場合は、

・最初の20件
「何件目から表示するか」を「1」にする。

・次の20件
「何件目から表示するか」を「61」にする。

・前の20件
「何件目から表示するか」を「21」にする。

・最後の20件
「何件目から表示するか」を「総件数-20」にする。

・5ページ目を表示する
「何件目から表示するか」を「81」にする。

のようになります。応用すれば、
1ページ目を表示→「何件目から表示するか」を「1」にする。
2ページ目を表示→「何件目から表示するか」を「21」にする。
3ページ目を表示→「何件目から表示するか」を「41」にする。
のように「直接、○ページ目に飛ぶ」と言うのも可能です。

この回答への補足

またまたすいません。教えてください。試行錯誤して作ってみたのですが、最終のページがうまくいきません。全部で96件あるのですが、test.php?page=9とtest.php?page=10が同じ表示(81~90)になってしまいます。そしてtest.php?page=11にすると最終ページになりますがtest.php?page=10のページで「次の10件」が表示されないので飛べません。また、$page -= 2を$page --;にしてみると前に戻らず現在の表示だけになってしまいます。最終ページの構文はどんな感じになるのでしょうか。よろしければお願いします。

define ( 'PAGE_MAX', 10 );

$page = $_GET['page'];

if ( $page == "" ) {
$page = 1;
}
// 最初のページで表示するレコードがあるか
$link3 = "<a href=\"test.php?page=1\">最初の10件";
// 総レコード数を取得
$sql = "select count(*) from test2";
$result = mysql_query ( $sql );
$rec = mysql_fetch_array ( $result );
// 総レコード数
$recMax = $rec[0];

// 次のページで表示するレコードがあるか
if ( $recMax > PAGE_MAX * $page + 1){
$page ++;
$link = "<a href=\"test.php?page=$page\">次の".PAGE_MAX."件";
}
// 前のページで表示するレコードがあるか
if ( $page <> 0 ) {
$page -= 2;
$link2 = "<a href=\"test.php?page=$page\">前の".PAGE_MAX."件";
}
//最初のページの場合
if ( $page == 0 ) {
$link2 = " ";
}

補足日時:2006/12/01 02:12
    • good
    • 0
この回答へのお礼

ありがとうございました!!PHPは最近勉強し始めた所でまだスキルはかなり低いですが頑張って作ってみます。

お礼日時:2006/11/30 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!