![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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のタイムアウトについて
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
他サーバーにあるファイルに書...
-
$_SESSION 有効期限をブラウザ...
-
PHPのif文でその処理を途中で抜...
-
phpのextension_dirを複数指定...
-
FTPコマンドでディレクトリごと...
-
youtubeに音声のみのmp4ファイ...
-
リンク先を隠す方法はないでし...
-
C#とJavaで、MP3タグの画像を表...
-
PHPMailerのサンプルコードのエ...
-
違法アップロードについて
-
XserverでpearのDBでMySQLに接続
-
.phpと.incファイルの違いはな...
-
文字化けについて
-
header("Content-type: applica...
-
mb_send_mailについて
-
透過PNGが透過されない!!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php で C言語のdefineマクロの...
-
BASIC認証のユーザー名をPHPで...
-
simplexml_load_file で呼び出...
-
PHPのタイムアウトについて
-
PEARのHTTP_Requestをインストール
-
PHPでxmlファイルへのデータの...
-
cakephpのサブタイトルはどこで...
-
同一ディレクトリの連番ファイ...
-
共通の処理をまとめる方法がわ...
-
phpのswitch文のcaseで
-
PHP MySql ページング
-
isset関数の動作と入力チェック...
-
PHPのstrpbrk関数ってひらがな...
-
RSSデータの読み込み方を教えて...
-
PEAR XML_Query2XMLを利用したP...
-
PHPでパラメータ取得
-
チェックボックスの値が受け取...
-
名前空間のあるXMLからの取り出し
-
echoの出力がうまくできない
-
PHPとHTMLをまとめてコメントア...
おすすめ情報