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

今、友人同士の名簿をデータべスにしてます。
そこで、mySQLをつかってPHPで検索するシステムを作りたく、検索まではできるようになったのですが、ページングの仕方がわかりません。
PEARは使用できないので、どなたか下記にどのようにプログラムを追加すればページング機能がつけられるか教えて下さい。お願い致します。
(下記の検索プログラムは、http://php.dori-mu.net/で紹介されていたものを利用しました。)
---------------------------------------------------------------
<html>
<head>
<title>PHP SEARCH RESULT</title>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
</head>
<body>
<?
$debug = false;

//DB接続
mysql_connect("127.0.0.1","sample","");
mysql_select_db("sample");

if($debug) print_r($HTTP_POST_VARS);

//エラーチェック
//リクエストメソッドチェック
if($REQUEST_METHOD != "POST") {
print "Error: invalid method";
exit();
}

//クエリ生成
$query = "SELECT * FROM search ";

//検索条件生成
//名前
if(!empty($name)) {
$name = addslashes($name);
$where = "name = '$name' && ";
}
//住所
if(!empty($address)) {
$address = addslashes($address);
$where .= "address REGEXP '$address' && ";
}
//性別
if(!empty($gender)) {
$gender = addslashes($gender);
$where .= "gender = '$gender' && ";
}
//スキル
if(!empty($skill)) {
foreach($skill as $value) {
$value = addslashes($value);
$temp_where .= "skill REGEXP '$value' || ";
}
$temp_where = substr($temp_where, 0, -4);
$where .= "(". $temp_where. ") && ";
}
if(!empty($where)) {
$where = substr($where, 0, -4);
$where = "WHERE " . $where;
}
$query .= $where;
if($debug) {
print "<BR><BR>";
print $query;
}

$result = mysql_query($query);
$num_rows = mysql_num_rows($result);

if($num_rows == 0) $message = "該当するデータはありませんでした";
else $message = $num_rows . "件ヒットしました";
?>
検索結果<br>
<?=$message?>
<table border=1>
<tr><td>名前</td><td>住所</td><td>性別</td><td>スキル</td></tr>
<? while($row = mysql_fetch_assoc($result)): ?>
<tr><td><?=$row[name]?></td><td><?=$row[address]?></td><td><?=$row[gender]?></td><td><?=$row[skill]?></td></tr>
<? endwhile; ?>
</table>
<a href="input.html">再検索</a>
</body>
</html>
----------------------------------------------------------------

A 回答 (4件)

No.2です。



>次のページ指定や次のページを表示することができませんでした。
というのはどうやって次のページに移るのかわからないって意味でしょうか?
でしたらGETで渡してるので,ブラウザのURL欄に
http://www.example.com/test.php?page=2
みたいにファイル名の後に?page=ページってやるとできるはずです。
またはGETが良く分からないなら
$page = $_GET{'page'}; //現在のページを受け取る
の部分を
$page = 2;
とすれば2ページに移るはずなんですけど。だめでしたか?

それとも次のページへのリンクが出せないって意味でしょうか?
それでしたらまずSQLで検索条件に一致するものの件数を取ってきて,最大ページを計算して,for文で回せば出せますよね。

参考URL:http://php.benscom.com/manual/ja/index.php
    • good
    • 0

limitを使って開始のレコードにページ毎に10件なり、20件なり足していけばいいと思います。



参考URL:http://news.joho.boo.jp/?day=20070904
    • good
    • 0

//ここから


$page = $_GET{'page'}; //現在のページを受け取る

//ページ指定がないときは1ページ目と見なす
if ($page == "") {
$page = 1;
}

$count_per_page = 10; //1ページ当たり10件表示
$query .= "limit $count_per_page offset ".($page-1)*$count_per_page;
//ここまで

というのを
if($debug) {
print "<BR><BR>";
print $query;
}
の前に入れたらできませんか?
チェックしてないのでミスがあったらすみません。
ブラウザからアクセスするときにファイル名の後に?page=2をくっつければ2ページ目が出るはずです。

これができたら,検索条件に一致した件数を取得してページ一覧を出す処理を追加してみたら使いやすくなりそうですね。
    • good
    • 0
この回答へのお礼

早々のご返答ありがとうございます。
limitで表示件数を規制するんですね。
自分のレベルは初心者なので、ご指摘いただいたとおりやってみたところ10件表示にはなるものの、次のページ指定や次のページを表示することができませんでした。
お手数ですがその方法もご教示頂ければありがたいです。
宜しくお願いします。

お礼日時:2007/12/18 09:26

どこまでスキルのある方か存じませんので


もしかしたら求めているものと違うかも?

普通は
"LIMIT 開始レコード,レコード数"

開始レコードを$_GET["sr"]みたいに
ページごとに取得して開始レコードにぶちこむ感じだと思います。

セッションやクッキーを使わないのであれば
毎回、条件も送らないといけないですね。

そーすは書く元気と気力がないっす。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
お疲れのところありがとうございます。

スキルは初心者で、PHPでつくるにしても、本やネットで元を頂いて、簡単なカスタマイズができる程度です。
なのでお恥ずかしいのですが、部分的にご指摘いただいてもわからない場合が多いです。

お疲れのところ恐縮ですが具体的にご指摘いただければ幸いです。
お願い致します。

お礼日時:2007/12/18 09:29

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