- 締切済み
MySQLからのデータをページに10件ずつ表示したい(訂正)
先ほど同じ質問をしたのですが、訂正箇所があったので改めて質問致します。管理人様、前回の質問を削除頂きますようお願い致します。 「名前のキーワード」と「年齢の幅」を入力するフォームから成る「form.html」とそのデータを受け取る「search.php」があります。 「search.php」は「名前」と「年齢」のデータが500件ほど格納されているデータベース名「database」からデータを取ってきて、10件ごとに表示を したいのですが、うまく表示されません。私が書いた「form.html」と「search.php」は以下の通りです。 「form.html」---------------------------- <html> <head> <title>名前と年齢を検索するフォーム</title> </head> <body> <form method="post" action="search.php"> <input type="text" name="name"> <input type="text" name="age_min"> 歳 ~ <input type="text" name="age_max" > 歳 <input type="submit" name="submit" value="検索"> </form> </body> </html> ---------------------------------------- 「search.php」(SELECT文に名前には「あいまい検索」を、年齢には「BETWEEN」を使っています)--------------------------------- <? if (isset($_GET['pos'])){ $offset = $_GET['pos']; } else { $offset = 0; } $ln = 10; //DB接続 $conn = mysql_pconnect ("localhost", "username", "password") or die ('接続できませんでした'); mysql_select_db ("database",$conn); //クエリ生成 $sql = "select name,age from search where name like '%$name%' and age between '$age_min' and '$age_max' limit $offset,$ln"; $res = mysql_query($sql); $num_rows = mysql_num_rows($res); if($num_rows == 0) $message = "該当するデータはありません"; else $message = $num_rows . "件ヒットしました"; echo "検索結果<br>"; echo "$message"; //SELECTで取得したレコードを出力 while($row = mysql_fetch_array($res)){ echo "<table border='1' cellpadding='0' cellspacing='0'>"; echo "<tr>"; echo "<td>".$row[name]."</td>"; echo "<td>".$row[age]."</td>"; echo "</tr>"; echo "</table>"; } //[前へ]リンクの設定 $next_pos = $offset-$ln; if ($next_pos >= 0) { echo("<a href= ".$_SERVER['PHP_SELF']."?pos=$next_pos>[前へ]</a>"); } //[次へ]リンクの設定 $next_pos =$offset+$ln; $sql = "select name,age from search where name like '%$name%' and age between '$age_min' and '$age_max' limit $next_pos,$ln"; $res =mysql_query($sql); if (mysql_num_rows($res) > 0) { echo("<a href= ".$_SERVER['PHP_SELF']."?pos=$next_pos>[次ヘ]</a><br>"); } ?> ----------------------------------------------------------------------------------- うまく表示されないというのは具体的に言いますと、例えば 検索結果が何百件ある場合でも、いつも「10件ヒットしました」と表示され、その上[次ヘ]をクリック しても「該当するデータはありません」と表示されてしまいます。ちなみにエラー等は出ません。私が書いた上のコードは私なりに色々な参考ページを 参照してのものなのですが。どなたか、上のコードでおかしい箇所などご指摘頂けましたら、幸いでございます。どうぞアドバイスの程よろしくお願い致します。
補足
yambejp様、返事が遅くなりまして申し訳ございません。私のやりたい事がバッチリ出来ました。ありがとうございます。そこで欲が出てしまって申し訳ないのですが、今度は入力エリアの未入力チェックと年齢を入れるエリアに数字以外の文字列を入れないようにチェックしたいのですが、以下をスクリプト文の最初に記述してみました。 if (empty($_REQUEST["name"])){ exit("名前を入力して下さい"); } if (!is_numeric($_REQUEST["age_min"])){ exit("最低年齢を入力して下さい"); } if (!is_numeric($_REQUEST["age_max"])){ exit("最高年齢を入力して下さい"); } ここで、私がつまずいた箇所は、if文+「echo(名前を入力して下さい等)」だけですと、MySQLに接続されてしまうという事で、それを回避するために、「exit関数」を使ってみました。また前回教えていただいた「is_numeric」を使えば、年齢欄に未入力だけでなく数字以外の文字が入った場合もエラー文を出せるという事で使いました。この場合、記述の順番に処理されるので、警告文は段階的に表示されてしまうのですが、出来るものならば、例えば、名前と最高年齢が未入力だった場合、「名前を入力して下さい」「最高年齢を入力して下さい」という風に、同時に2つや3つの警告文を出したかったのですが。 yambejp様だったら、もっと素晴らしい方法がおありだと思いますが、何卒ご吟味も程よろしくお願い致します。