- 締切済み
ページングをつけたいんです。教えて下さい。
今、友人同士の名簿をデータべスにしてます。 そこで、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> ----------------------------------------------------------------
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ym035
- ベストアンサー率50% (6/12)
No.2です。 >次のページ指定や次のページを表示することができませんでした。 というのはどうやって次のページに移るのかわからないって意味でしょうか? でしたらGETで渡してるので,ブラウザのURL欄に http://www.example.com/test.php?page=2 みたいにファイル名の後に?page=ページってやるとできるはずです。 またはGETが良く分からないなら $page = $_GET{'page'}; //現在のページを受け取る の部分を $page = 2; とすれば2ページに移るはずなんですけど。だめでしたか? それとも次のページへのリンクが出せないって意味でしょうか? それでしたらまずSQLで検索条件に一致するものの件数を取ってきて,最大ページを計算して,for文で回せば出せますよね。
- taaaaaaa
- ベストアンサー率38% (31/80)
limitを使って開始のレコードにページ毎に10件なり、20件なり足していけばいいと思います。
- ym035
- ベストアンサー率50% (6/12)
//ここから $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ページ目が出るはずです。 これができたら,検索条件に一致した件数を取得してページ一覧を出す処理を追加してみたら使いやすくなりそうですね。
- widoww
- ベストアンサー率20% (33/159)
どこまでスキルのある方か存じませんので もしかしたら求めているものと違うかも? 普通は "LIMIT 開始レコード,レコード数" 開始レコードを$_GET["sr"]みたいに ページごとに取得して開始レコードにぶちこむ感じだと思います。 セッションやクッキーを使わないのであれば 毎回、条件も送らないといけないですね。 そーすは書く元気と気力がないっす。
お礼
ご返答ありがとうございます。 お疲れのところありがとうございます。 スキルは初心者で、PHPでつくるにしても、本やネットで元を頂いて、簡単なカスタマイズができる程度です。 なのでお恥ずかしいのですが、部分的にご指摘いただいてもわからない場合が多いです。 お疲れのところ恐縮ですが具体的にご指摘いただければ幸いです。 お願い致します。
お礼
早々のご返答ありがとうございます。 limitで表示件数を規制するんですね。 自分のレベルは初心者なので、ご指摘いただいたとおりやってみたところ10件表示にはなるものの、次のページ指定や次のページを表示することができませんでした。 お手数ですがその方法もご教示頂ければありがたいです。 宜しくお願いします。