dポイントプレゼントキャンペーン実施中!

ある住所録があり、インデックスをつけてページング処理もさせたいと思っています。
具体的には、「あ」を押すとあ行の人のデータが1~10件表示され、
「next」を押すと、「あ」行の11~20件を表示するイメージになります。
以下のPHPを作成しましたがうまく動作しません。
どうしたらよろしいでしょうか。
ご教授ください。宜しくお願い致します。

**********************************
エラーメッセージ
**********************************
Notice: Undefined variable: dtcnt in C:\Program Files\Apache…テスト.php on line 359

359行目が「back」を表示するコードになります↓。
if ($p > 1) {
echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\">
back</a>";
}


******************************
作成したPHP
環境:PGSQL8.24 PHP5 Apache2.2
******************************

<a href="テスト.php?x=a">あ</a>
<a href="テスト.php?x=ka">か</a>

<a href="テスト.php?x=wa">わ</a>

<table>
<tr>
<th>NO</th>
<th>氏名</th>
<th>住所</th>
</tr>
<?php
// データベースに接続する
$conn = pg_connect("host=サーバ dbname=データベース
user=ユーザ password=パスワード") or die("接続エラー");

// 取り出す最大レコード数
$lim = 10;

// 表示するページ位置を取得する
$p = intval(@$_GET["p"]);
if ($p < 1) {
$p = 1;
}

// 表示するデータの位置を取得する
$st = ($p - 1) * $lim;

// 前のページ/次のページのページ番号を取得する
$prev = $p - 1;
if ($prev < 1) {
$prev = 1;
}
$next = $p + 1;

// データを取り出す
if ($_GET['x']=='a') { // あ行
$sql = "select no, name, address from テーブル WHERE (name LIKE N'あ%' OR name LIKE N'い%' OR name LIKE N'う%' OR name LIKE N'え%' OR name LIKE N'お%') ORDER BY name LIMIT $lim OFFSET $st;";
}

…(か行~ら行)

if ($_GET['x']=='wa') { // わ行
$sql = "select no, name, address from テーブル WHERE (name LIKE N'わ%' OR name LIKE N'を%' OR name LIKE N'ん%') ORDER BY name LIMIT $lim OFFSET $st;";
}

// 取り出したデータを表示する
for ($i = 0; $i < pg_num_rows($res); $i++) {
$row = pg_fetch_array($res, $i, PGSQL_ASSOC);
echo "<tr>";
echo "<td>".$row["id"]."</td>";
echo "<td>".cnv_enc($row["name"], $enc_disp, $enc_db)."</td>";
echo "<td>".$row["address"]."</td>";
echo "</tr>";
}
echo "</table>";

// 前のページ/次のページへのリンク
if ($p > 1) {
echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\">
back</a>";
}
if (($next - 1) * $lim < $dtcnt) {
echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\">
next</a>";
}

// 接続を解除する
pg_close($conn);
?>

</table>
</body>
</html>

A 回答 (2件)

#1です。


もとのエラーメッセージによって、dtcntという変数が見つからなかったですよね。
今度dtcntがありますのに、$_GET配列にxという変数がないらしいです。
前のページのリンクに、xをちゃんとつけていますか?


よくわからないですが、ご参考になればうれしいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>前のページのリンクに、xをちゃんとつけていますか?
前のページはありません。ここがトップページになります。
また行が抜けていました。

**********************
抜けていた行
**********************

<a href=テスト.php?x=a>あ</a><br>
<a href=テスト.php?x=ka>か</a><br>

<a href=テスト.php?x=wa>わ</a><br>

ここで「あ」を押すと、「x」の値をGETできるようにしています。

お礼日時:2007/09/06 15:00

if (($next - 1) * $lim < $dtcnt)



dtcntの値は?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
4行抜けておりました。データベースに接続した後に4行入ります。
「next」が表示されるようになりましたが、11~20件が表示されず、また、例えば「か」行が10件以下の場合も「next」が表示されてしまいます。
どうしたらよろしいでしょうか。
ご教授ください。宜しくお願い致します。

**********************************
エラーメッセージ
**********************************
Notice: Undefined index: x in C:\Program Files\Apache Software Foundation\Apache…テスト.php on line 290

290行目はデータを取り出すするコードになります↓。
// データを取り出す
if ($_GET['x']=='a') { // あ行
$sql = "select no, name, address from テーブル WHERE (name LIKE N'あ%' OR name LIKE N'い%' OR name LIKE N'う%' OR name LIKE N'え%' OR name LIKE N'お%') ORDER BY name LIMIT $lim OFFSET $st;";
}

******************************
作成したPHP
環境:PGSQL8.24 PHP5 Apache2.2
******************************

>// データベースに接続する
>$conn = pg_connect("host=サーバ dbname=データベース
>user=ユーザ password=パスワード") or die("接続エラー");

$sql = "SELECT COUNT(*) AS cnt FROM clip2;";
$res = pg_query($conn, $sql) or die("データ抽出エラー");
$row = pg_fetch_array($res, 0, PGSQL_ASSOC);
$dtcnt = $row["cnt"];

>// 取り出す最大レコード数
>$lim = 10;

お礼日時:2007/09/04 15:28

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