
1ページの表示件数は4
下記のようにページングしています
最初 3 4 5 最後
18件中 13-16件目を表示
これを下記のようにしたいです
最初 3 4 5 6 7 8 9 10 11 12 最後
よろしくお願い致します
<?php
// DBとの接続
include_once 'dbconnect.php';
// GETで現在のページ数を取得する(未入力の場合は1を挿入)
if (isset($_GET['page'])) {
$page = (int)$_GET['page'];
} else {
$page = 1;
}
// スタートのポジションを計算する
if ($page > 1) {
// 例:2ページ目の場合は、『(2 × 10) - 10 = 10』
$start = ($page * 4) - 4;
} else {
$start = 0;
}
// SELECT文を変数に格納
// 4件表示
$sql = "SELECT * FROM users ORDER BY created_at DESC LIMIT $start, 4";
// SQLステートメントを実行し、結果を変数に格納
$stmt = $pdo->query($sql);
$count = $stmt -> rowCount();
echo $count.'件ずつ表示しています。';
// 水平線を入れる
echo '<hr>';
// foreach文で配列の中身を一行ずつ出力
foreach ($stmt as $row) {
// データベースのフィールド名で出力
echo '投稿日:'.$row['created_at'].'<br>'.'NO:'.$row['user_id'].'<br>'.'氏名:'.$row['username'].'<br>'.'伝言:'.$row['content'];
// 水平線を入れる
echo '<hr>';
}
// SELECT文を変数に格納
// すべて
$alldata = "SELECT * FROM users ORDER BY created_at";
// SQLステートメントを実行し、結果を変数に格納
$stmt2 = $pdo->query($alldata);
$count2 = $stmt2 -> rowCount();
echo '全部で'.$count2.'件あります。';
// 水平線を入れる
echo '<hr>';
// 総ページ数を取得する
// (例)18÷4=4.5 切り上げ 5
$totalpages = ceil($count2 / 4);
// □件中 ○-△件目を表示
// $count2 全件数を取得
// レコードは4件ずつ表示
// ○ - △件目を表示
// ○は(現在ページ - 1) * 4 + 1で表示
// △は現在ページに4を掛けると表示
// しかし(例)全件数18件の時、17-20になる
// この場合、現在ページから1引いて4をかけた数に、(剰余:割り算の商と余りを計算)全件数を4で割ったあまりの数を足すと正しい数が出る
// (例)18件目は、5ページ目になる。(5-1)×4=16に、18÷4=商は4 余りは2、16+2=18
// 18件中 17-18件目を表示
$from_record = ($page - 1) * 4 + 1;
if($page == $totalpages && $count2 % 4 !== 0) {
$to_record = ($page - 1) * 4 + $count2 % 4;
} else {
$to_record = $page * 4;
}
?>
<html>
<body>
<!-- 最初のページ -->
<a href="?page=1">最初</a>
<!-- 前のページ -->
<?php if ($page > 1) : ?>
<a href="?page=<?php echo ($page - 1); ?>"><?php echo ($page - 1); ?></a>
<?php endif; ?>
<!-- 表示中ページ -->
<?php echo $page; ?>
<!-- 次のページ -->
<?php if ($page < $totalpages) : ?>
<a href="?page=<?php echo ($page + 1); ?>"><?php echo ($page + 1); ?></a>
<?php endif; ?>
<!-- 最後のページ -->
<a href="?page=<?php echo ($totalpages); ?>">最後</a>
<br />
<?php echo $count2; ?>件中
<br />
<?php echo $from_record; ?> - <?php echo $to_record;?> 件目を表示
</body>
</html>
No.2ベストアンサー
- 回答日時:
> リンクをつけない方法
function 表示($message, $page_no = null) {
_ if (isset($page_no)) ...
_ else ...
}
表示($i, ($i != C)? $i: null);
No.1
- 回答日時:
C = 表示頁
T = 総件数
E = 頁毎の件数
P = ceil(T / E) = 総頁数
A = 前後に表示する頁数
X = max(1, C - A)
Y = min(P, C + A)
if (X > 1) 表示(1);
for ($i=X; $i<=Y; $i++) 表示($i);
if (Y < P) 表示(P);
Ogre7077 様
回答ありがとうございます。
勉強になりました。
特に「XとY」の考え方は参考になりました。
可能であれば、あと一点教えて下さい。
表示しているページは、リンクをつけない方法はありますでしょうか?
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHPのエラーの解消法について教...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php で C言語のdefineマクロの...
-
「include()」関数の使い方につ...
-
PHPのタイムアウトについて
-
PHPを使ってRSSコードから画像...
-
PHPのstrpbrk関数ってひらがな...
-
echoの出力がうまくできない
-
複数のフレームに値を送るには
-
phpの言語のエラーについて
-
BASIC認証のユーザー名をPHPで...
-
DBから取得した内容を横表示
-
index.phpで外部PHPファイルを...
-
phpのswitch文のcaseで
-
同じような処理を一つにまとめたい
-
PHP MySql ページング
-
PHPとHTMLをまとめてコメントア...
-
phpのurlパラメータで取得した...
-
パスワード認証後次のページに...
-
「include」と「file_get_conte...
-
yahooAPIを使って表示させた文...
-
PHP Mysql SELECTであいまい検...
おすすめ情報