PHPとMySQLで掲示板を作っています。
ページングの処理で分からないことがあるので質問をさせていただきます。
画面に10件のレコードを表示するようにしています。
データベースにさらに10件以上のデータがあれば次の10件のレコードを表示する「次へ」リンク
なければリンクを表示しない判別をしたいのですが上手くいきません。
ホームページを参考にし、
if(count($row) > $limit){
array_pop($row);
echo '<a href="index.php?p=', $next_num, '">次へ</a>','</td>';
} else {
echo '末尾';
}
で分岐をしたいのですが、$rowのcountがechoで出力したところ1となってしまい上手くいきません。
何か原因があるのでしょうか。もしくは別の方法で分岐を取り入れることは可能でしょうか。
<?php $p = isset($_GET['p']) ? intval($_GET['p']) : 0; $limit = 10; $v_page = $limit + 1; $offset = $p * $limit; $pdo=new PDO('mysql:host=ホスト名;dbname=board;charset=utf8','ユーザー','パス'); $sql=$pdo->prepare('select * from board1 order by nomber desc limit :limit offset :offset '); $sql->bindValue(":limit", $v_page, PDO::PARAM_INT); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->execute(); while ($row = $sql -> fetch(PDO::FETCH_ASSOC)){ echo '<tr>'; echo '<td>', htmlspecialchars($row['nomber']), '</td>'; echo '<td>', htmlspecialchars($row['name']),'</td>'; echo '<td>', '<img src="',$row['icon'],'.png">','</td>'; echo '<td>', htmlspecialchars($row['trip']), '</td>'; echo '<td>', htmlspecialchars($row['message']), '</td>'; echo '<td>', '<a href="delete-in.php?nomber=', $row['nomber'], '">削除</a>','</td>'; echo '</tr>'; echo "\n"; } $next_num = $p+1; $prev_num = $p-1; if(count($row) > $limit){ array_pop($row); echo '<a href="index.php?p=', $next_num, '">次へ</a>','</td>'; } else { echo '末尾'; } if($p > 0){ echo '<a href="index.php?p=', $prev_num, '">前へ</a>','</td>'; } else { echo ''; }
皆様のご回答を参考に下記で解決いたしました。
・総ページ数を求めるということ、またその求め方
・fetchを使う場合のcountの戻り値
を知ることができ大いに勉強になりました。
ご回答いただきました皆様本当にありがとうございます。
<?php $p = isset($_GET['p']) ? intval($_GET['p']) : 0; $limit = 10; $v_page = $limit + 1; $offset = $p * $limit; $pdo=new PDO('mysql:host=ホスト;dbname=board;charset=utf8','ユーザー','パス'); $sql=$pdo->prepare('select * from board1 order by nomber desc limit :limit offset :offset '); $sql->bindValue(":limit", $v_page, PDO::PARAM_INT); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->execute(); while ($row = $sql -> fetch(PDO::FETCH_ASSOC)){ echo '<tr>'; echo '<td>', htmlspecialchars($row['nomber']), '</td>'; echo '<td>', htmlspecialchars($row['name']),'</td>'; echo '<td>', '<img src="',$row['icon'],'.png">','</td>'; echo '<td>', htmlspecialchars($row['trip']), '</td>'; echo '<td>', htmlspecialchars($row['message']), '</td>'; echo '<td>', '<a href="delete-in.php?nomber=', $row['nomber'], '">削除</a>','</td>'; echo '</tr>'; echo "\n"; } #ここまでは質問時のソースと同じです。 #ここからソースを書き換えました。 $pdo=new PDO('mysql:host=ホスト;dbname=board;charset=utf8','ユーザー','パス'); $sql=$pdo->query('select * from board1'); $total_res=$sql->rowCount(); $next_num = $p+1; $prev_num = $p-1; $total_page= ceil($total_res / $limit); if($p > 0){ echo '<a href="index.php?p=', $prev_num, '">前へ</a>','</td>'; } else { echo '最新'; } if($total_page-1 > $p){ echo '<a href="index.php?p=', $next_num, '">次へ</a>','</td>'; } else { echo '末尾'; } ?>
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/12 07:36
2017/01/12 07:37