
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><head>";
print "<meta http-equiv=\"Content-Type\" content=\"text/javascript; charset=UTF-8\">\n";
print "<title>図書管理システム</title>\n</head>";
print "<body>";
use DBI;
$dbname = "bookmanagement";
$host = "localhost";
$user = "";
$password = "";
$table = "booktable";
$conn = DBI-> connect("DBI:Pg:dbname=$dbname;host=$host", $user, $password )|| die "DBI connect failed: $DBI::errstr";
$sql = "select * from $table order by id";
$result = $conn->prepare($sql);
$ref = $result->execute;
print <<HEADER;
<body>
<div align="right"><a href="./rental.cgi">ログアウト</a></div>
<center>
<caption><h2>図書管理システム </h2></caption>
<table border=2>
<tr bgcolor="#dcdcdc">
<th>ID</th>
<th nowrap>本名称</th>
<th nowrap>著者</th>
<th>説明</th>
<th nowrap>登録日</th>
<th nowrap>状態</th>
<th nowrap>貸出日</th>
<th nowrap>貸出人</th>
</tr>
HEADER
while(my @ref = $result->fetchrow) {
print <<ROW;
<tr>
<td>$ref[0]</td>
<td>$ref[1]</td>
<td nowrap>$ref[2]</td>
<td>$ref[3]</td>
<td nowrap>$ref[4]</td>
<td nowrap>$ref[5]</td>
<td nowrap>$ref[6]</td>
<td>
ROW
if($ref[7] eq ""){
print "<br>";
}
else{
print "$ref[7]";
}
print <<ROW;
</tr>
ROW
}
print <<FOOTER;
</table>
</center>
FOOTER
$result->finish;
$conn->disconnect;
上のコードで今DBの中身が見れるようになっているのですが、一度に全部表示するようになってしまっていて
データ数(?)が多すぎてスクロールするのが面倒なので、データを15件ずつに分けて<前へ 次へ>みたいなのを
作りたいと思っているのですが、どのようにしたら分りません。おわかりになる方がいましたら実装する為の
コードを教えて頂けないでしょうか?よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
いまさらながらの回答ですが、検索結果が 100件あり、1ページに10件ずつ
表示するのであれば、全部で10ページに分割することになります。
分割したページには他のページに移動するためにリンクを作ります。
例えば
<a href="foo.cgi?page=1&key=検索キー>ページ 1</a>
<a href="foo.cgi?page=2&key=検索キー>ページ 2</a>
<a href="foo.cgi?page=3&key=検索キー>ページ 3</a>
...
のようなリンクを作り、変数として渡された page の値から
計算すればよいです。
No.2
- 回答日時:
データベースが PostgreSQL であれば OFFSET と LIMIT を使い、
検索結果の一部を取り出すことができます。
select * from $table order by id
を
select * from $table order by id limit $limit offset $offset
とします。ここで、$limit は 1ページに表示する件数、$offset を
(ページ番号 - 1) * $limit とすると、そのページに表示する
データだけを抽出することができます。
検索結果ページにページ番号のリンクを作り、クリックされたとき
$offset を計算して表示すればよいです。
参考URL:http://www.postgresql.jp/document/pg732doc/user/ …
この回答への補足
t-okura様、返信遅くなり申し訳ありません。
$offsetの(ページ番号 - 1) * $limitということなのですが、ページ番号というのは$page=1;とかって設定してしまってよいのでしょうか?
それでよかったとしても
>>検索結果ページにページ番号のリンクを作り、クリックされたとき
$offset を計算して表示すればよいです。
の作り方が良く分からず困っております。よろしければ教えて頂けますでしょうか?
No.1
- 回答日時:
while(my @ref = $result->fetchrow) {
の意味はわかってますよね。
ここを適当に変えて、次ページへのリンクで指定してやればよい。
ほかの部分がわからないので、これ以上は無理。
この回答への補足
ORUKA1951さんありがとうございます。
>>while(my @ref = $result->fetchrow) { の意味
booktableに登録された各行のそれぞれのデータを配列refに入れている
ってことではないでしょうか?
>>ほかの部分がわからない
何が必要なのかこちらも分からないです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ削除方法について
-
ひらがなチェック
-
sendmailの文字化け
-
perl-cgi 文章のマッチングにつ...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
掲示板(kentさんの所のsunbbs...
-
PHPで検索ボタンを押さずに検索...
-
ブックマークからのアクセスを...
-
MSPゴシックで、一番幅を取る文字
-
チェックボックスの返す値
-
左右のフレームを同時にスクロ...
-
チェックボックスとセレクトボ...
-
「value」に2つの値をセットす...
-
一つの検索窓で複数のサイトか...
-
<select>タグの幅設定
-
別サーバーのcgiへバイナリデー...
-
select値をhiddenのvalueに渡し...
-
プログラミングについての質問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActivePerlとApacheを自分のP...
-
データ削除方法について
-
sjisでの文字化け?
-
TABを表示させる方法
-
perlで索引スタイルありますか。
-
ヒアドキュメントが表示されない
-
If文について教えてください。
-
関数について
-
ひらがなチェック
-
『数字の3桁毎にカンマを付け...
-
print HTML~をヒアドキュメントで
-
cgiの500エラー
-
Perlで数が正しくファイル...
-
ブラウザ表示されません大変困...
-
sendmailの文字化け
-
ランダムに1行読込み フォーム...
-
perl-cgi 文章のマッチングにつ...
-
ページング処理ついて困っています
-
CGIで取得したデータをjavaに送...
-
検索結果テーブルの背景色を変...
おすすめ情報