プロが教えるわが家の防犯対策術!

#!/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件ずつに分けて<前へ 次へ>みたいなのを
作りたいと思っているのですが、どのようにしたら分りません。おわかりになる方がいましたら実装する為の
コードを教えて頂けないでしょうか?よろしくお願い致します。

A 回答 (3件)

while(my @ref = $result->fetchrow) {


の意味はわかってますよね。
ここを適当に変えて、次ページへのリンクで指定してやればよい。
ほかの部分がわからないので、これ以上は無理。

この回答への補足

ORUKA1951さんありがとうございます。

>>while(my @ref = $result->fetchrow) { の意味

booktableに登録された各行のそれぞれのデータを配列refに入れている
ってことではないでしょうか?

>>ほかの部分がわからない
何が必要なのかこちらも分からないです

補足日時:2010/01/22 16:38
    • good
    • 0

データベースが 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 を計算して表示すればよいです。
の作り方が良く分からず困っております。よろしければ教えて頂けますでしょうか?

補足日時:2010/01/25 09:15
    • good
    • 0

いまさらながらの回答ですが、検索結果が 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 の値から
計算すればよいです。

この回答への補足

返信遅くなり申し訳ありませんでした

このヒントを元にもう少し頑張ってみようと思います
ありがとうございました。

補足日時:2010/02/10 09:27
    • good
    • 0

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