アプリ版:「スタンプのみでお礼する」機能のリリースについて

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>

A 回答 (2件)

> リンクをつけない方法



function 表示($message, $page_no = null) {
_ if (isset($page_no)) ...
_ else ...
}

表示($i, ($i != C)? $i: null);
    • good
    • 0

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);
    • good
    • 0
この回答へのお礼

Ogre7077 様

回答ありがとうございます。
勉強になりました。

特に「XとY」の考え方は参考になりました。

可能であれば、あと一点教えて下さい。
表示しているページは、リンクをつけない方法はありますでしょうか?
よろしくお願い致します。

お礼日時:2022/09/22 00:54

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