• 締切済み

phpのプルダウンメニューとページャの組み合わせ

プルダウンメニューで選択し、データベースから所定属性(例えば全部表示、住所、性別とか)の一覧を表示し、20件づつ表示するプログラムです。 一ページ目は問題ないのですが、二ページ目から「全部表示」になってしまいます。プルダウンメニュがリセットされていて、ページャに反映されないのですが、解決方法を教えてください。 よろしくお願いいたします。

みんなの回答

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.1

どういう風に実装されているか説明いただかないと、にんともかんとも、どこが悪いのか。 結局、投げてるSQLが全件検索だということぐらいしか想像はできません。

jinnn
質問者

補足

以下がソースコードです、プルダウンメニューとテキストフィールドで検索条件を分岐し、ページャーで表示します。 全表示ですと問題ないのですが、例えば女性のみを検索表示した場合、一ページ目は問題ないのですが、二ページ目から全表示のページの二ページ目になってしまいます。 データーベース名はdbname テーブル名はtbname にしています。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title></title> </head> <body> <table align="center"><tr><td> <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"> <select name="attr"> <option value="all">全表示</option> <option value="sex">性別</option> <option value="address">住所</option> </select> <input type="text" name="kensaku"> <input type="submit" value="検索"> </form></td></tr></table> <?php $attr=$_POST['attr']; $kensaku=$_POST['kensaku']; if($attr==all){$jouken='';} if($attr==sex){$jouken='WHERE tbname.sex='."$kensaku";} if($attr==address){$jouken='WHERE tbname.address='."$kensaku";} //事前にMySQLに接続 $conn = mysql_connect("hostname,dbname,password); //データベースを選択 mysql_select_db("dbname", $conn); //ページング処理 //総レコード数を取得する //条件がある場合は、where 条件式を書く $sql = "SELECT COUNT(*) AS reccnt FROM tbname $jouken"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $reccnt = $row["reccnt"]; //取り出す最大レコード数 $lim = 20; //最初と最後のページ番号を定義 $first = 1; $last = ceil($reccnt / $lim); //表示するページ位置を取得 $p = intval($_GET['p']); if ($p < $first) { $p = $first; } elseif ($p > $last) { $p = $last; } //表示するレコード位置を取得 $st = ($p - 1) * $lim; //前後のページ移動数と表示数 $page = 3; //前後$pageページ移動した際のページ番号を取得 $prev = $p - $page; $next = $p + $page; //前後1ページ移動した際のページ番号を取得 $prev1 = $p - 1; $next1 = $p + 1; //データーの検索と表示 $sql = "SELECT * FROM dat_order $jouken ORDER BY code DESC LIMIT $st, $lim;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); echo "<TABLE align=center>"; echo "<TR>"; echo "<TD>性別"; echo "</font></TD>"; echo "<TD>住所"; echo "</TD>"; echo "</TR>"; while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<TR>"; echo "<TD>". $row[sex]; echo "</TD>"; echo "<TD>" . $row[address]; echo "</TD>"; echo "</TR>"; } echo "</TABLE>"; //ページ移動リンクの組み立て //1ページ前のページ echo "<TABLE border='0' align=center width=300 >"; echo "<TR>"; echo "<TD>"; if ($p > 1) { echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$prev1\"><</a></font>&nbsp"; } //各ページ番号への移動リンクを表示 for ($cnt = $p - $page; $cnt <= $last; $cnt++) { if ($cnt < 1) { $cnt = 1; } $pageno = "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a></font>&nbsp"; //表示番号を指定数に区切る //ページ番号と現在のページが同一の場合は //リンク無しにする if ($cnt <= $p + $page) { if ($cnt == $p) { $pageno = "<font size=\"4\">$p</font>&nbsp"; } echo $pageno; } } //1ページ後のページ if (($next1 - 1) * $lim < $reccnt) { echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$next1\">></a></font>&nbsp"; } echo "<br>\n"; //最初のページへ移動 if ($p > 1) { echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a></font>&nbsp"; } //前の$pageページへ移動 if ($p > $page) { // << を $page"."ページ戻る にする事もできる echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a></font>&nbsp"; } //次の$pageページへ移動 if (($next - 1) * $lim < $reccnt) { // >> を $page"."ページ進む にする事もできる echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a></font>&nbsp"; } //最後のページへ移動 if ($p < $last) { echo "<font size=\"4\"><a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a></font>&nbsp"; } echo "</TD>"; echo "</TR>"; echo "</TABLE>"; ?> </body> </html>

関連するQ&A