こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データベースのページング出力を行うPHPのコード

現在、phpとmySQLを勉強しています。

データベース名:animal、テーブル名:pet、フィールド名が順にID:title:url:scoreで
1:ねこ:neko.com:43
2:いぬ:空白:24
3:空白:空白:空白
4:とり:bird.com:62

というデータがあります。

このとき、
1<a href="neko.com">ねこ</a>43<br>
2<a href=" ">いぬ</a>24<br>
3<a href=" "></a><br>
4<a href="bird.com">とり</a>62<br>

のように10行ずつhtmlに出力するPHPを書こうと思っています。
10行ずつですので、上の例だとURLの最後の書き換えによってpage=2、page=3、…とアクセスできます。


自分でもmysqlを呼び出し、要素を変数に格納して、foreachを使って最後まで順繰りに出力するように作成して、ページングするように作ってみたのですが、どうも正常に出力されません。

考えましたがどうにも原因が不明なので、どなたかこのような動作を示すPHPの模範コードを書いていただけないでしょうか。

PHPは未だ勉強中ですが、教えていただいたコードと自分のコードを比較して、より精進したいと思います。

どうかよろしくお願いします。

投稿日時 - 2011-02-01 15:45:34

QNo.6490368

困ってます

質問者が選んだベストアンサー

簡単なページング機能付きで書いてみました。
細部でなにかしら修正が必要かもしれないのでがんばってください。
(質問文を見るとGETを使うような記述でしたがこれはPOSTで処理してます)
検索機能とか付けてみるのも勉強になると思いますよ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="No-Cashe">
<meta http-equiv="Cache-Control" content="No-Cache">
<title>リスト</title>
<script type="text/javascript">
<!--
function changepage (page) {
document.forms["linkform"].page.value = page;
document.forms["linkform"].submit();
}
-->
</script>
</head>
<body>
<?php
// MYSQL DB接続パラメータ設定(自分の環境に合わせて設定)
$host=""; // ホスト名
$user=""; // ユーザー名
$pass=""; // パス
$dbname=""; // 使用DB名

// 表示するページの決定
if (isset($_POST["page"])) {
$page=$_POST["page"];
} else {
$page=1;
}
// MYSQLコネクト
mysql_select_db($dbname,mysql_connect($host,$user,$pass)) or die("DBコネクトエラー");
// 1ページ表示最大件数設定
$maxrow=10;
// 全件数を取得
$sql = "SELECT count(*) as count FROM pet";
$result=mysql_query($sql);
$row=mysql_fetch_assoc($result);
$count = $row["count"];
// 表示するページのデータの先頭行と最終ページの値を計算する
$first = (($page-1)*$maxrow);
$maxpage=intval((($count-1)/$maxrow)+1);
// ページリンク作成(表示ページの番号は少し大きくする)
$pagelink = "全".$count."件<br>\n";
for ($i=1;$i<=$maxpage;$i++) {
$pagelink = $pagelink."<a href=\"#\" onclick=\"changepage('".$i."');return false;\">";
if ($i==$page) {
$pagelink = $pagelink."<font size=\"+2\">".$i."</font></a> ";
} else {
$pagelink = $pagelink.$i."</a>\n";
}
}
print($pagelink."<br><hr>");

// 情報を取得
$sql = "SELECT id,title,url,score FROM pet";
$sql = $sql." ORDER BY id limit ".$first.", ".$maxrow;
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)) {
?>
<?php print($row["id"]); ?><a href="<?php print($row["url"]); ?>"><?php print($row["title"]); ?></a><?php print($row["score"]); ?><br>
<?php
}
?>
</table>
<form action="list.php" name="linkform" method="post">
<input type="hidden" name="page" value="">
</form>
</body>
</html>

投稿日時 - 2011-02-01 17:34:24

お礼

おお!ご回答、ありがとうございます!
duronさんが作成してくれたコードを参考にして、自分のコードはどこが悪かったのか明日1日かけてじっくり検討してみようと思います。
これで勉強が続けられます。大変助かりました。
また問題に直面した場合は、どうかよろしくお願いいたします。
本当にありがとうございました。

投稿日時 - 2011-02-01 22:41:54

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

データベースの参照結果をページングする場合の一般的な手段は、Limit句を使います。

下記のようなSQLを使います
Select ... Limit (表示する行数) Offset (開始行数) ;
・1ページ 10行で、2ページ目を表示する場合は
Select ... Limit 10 Offset 10 ;

投稿日時 - 2011-02-01 16:52:35

お礼

ありがとうございます。参考にさせていただきます。

投稿日時 - 2011-02-01 22:31:07

あなたにオススメの質問