• 締切済み

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件ヒットしました」と表示され、その上[次ヘ]をクリック しても「該当するデータはありません」と表示されてしまいます。ちなみにエラー等は出ません。私が書いた上のコードは私なりに色々な参考ページを 参照してのものなのですが。どなたか、上のコードでおかしい箇所などご指摘頂けましたら、幸いでございます。どうぞアドバイスの程よろしくお願い致します。

  • MySQL
  • 回答数6
  • ありがとう数19

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

それは申し訳ないことをしました。 emptyは値が0の場合、カラと判断してしまいます。 ちょっと工夫が必要でした。 if(!empty($age_min) and !empty($age_max)) の箇所を if(is_numeric($age_min) and is_numeric($age_max)) としてみてはどうでしょうか?

phpsirouto
質問者

補足

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様だったら、もっと素晴らしい方法がおありだと思いますが、何卒ご吟味も程よろしくお願い致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

以下をためしてください。 //form.htm <html> <head> <title>名前と年齢を検索するフォーム</title> </head> <body> <form method="get" 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 <? if (isset($_GET['pos'])) $offset = $_GET['pos']; else $offset = 0; $ln = 10; $search=""; $name=$_REQUEST["name"]; if(!empty($name)) $search.=($search==""?"":"&")."name=".urlencode($name); $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; if(!empty($age_min) and !empty($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}"; $sql_0 = "from search where name like '%{$name}%' and age between '$age_min' and '$age_max'"; $sql= "select count(*) as count {$sql_0}"; print $sql."<br>\n"; $sql= "select name,age {$sql_0} limit $offset,$ln"; print $sql."<br>\n"; $next_pos = $offset-$ln; if ($next_pos >= 0) echo "<a href=\"{$_SERVER['PHP_SELF']}?pos={$next_pos}&{$search}\">[previous]</a>"; $next_pos =$offset+$ln; echo "<a href= ".$_SERVER['PHP_SELF']."?pos={$next_pos}&{$search}>[next]</a><br>"; ?>

phpsirouto
質問者

補足

yambejp様、本当にいつもありがとうございます。 yambejp様がご指摘して頂いたコードをそのまま組み合わせていた事を反省し、自分なりに、yambejp様のご回答をひとつひとつ、どういう意味があるのか調べて見ました。完全ではありませんが、勉強になりました。 そして色々と数値を当てはめて結果を確認していたのですが、なぜだめだったかがわかりました。それは「$age_min」の値に0(0歳)を入れて試していたためでした。「$age_min」の値を1以上にすれば、ばっちり「次へ」をクリックすると残りの件数が表示されます。「$age_min」の値が0の場合のみうまくいきません。これはMySQLのデータの型の方と関係があるのでしょうか?度々すみませんが、私も一生懸命調べてみますのでどうぞ、よろしくお願い致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>ちなみに「method=post」で送信しています。 とありますが・・・ > echo("<a href= ".$_SERVER['PHP_SELF']."?pos=$next_pos>[次ヘ]</a>"); って明らかにGETでデータを渡していますよね? もしかしてそのあたりを無自覚でなさっているのでしょうか・・・ なので、GETで繋ぐか、セッションをつかうかのどちらかです。 (これも#2にかいたままなのですが) セッションについてはPHPマニュアルのセッションの項を一度熟読ください。 http://www.php.net/manual/ja/refs.basic.session.php GETでつなぐなら#3で拾った$searchの値を次へのurlに繋げるだけです。 echo("<a href='{$_SERVER['PHP_SELF']}?pos={$next_pos}&{$search}'>[次ヘ]</a>"); 回答を一度よく噛み砕いてご自身なりに理解なさることをオススメします。

phpsirouto
質問者

補足

yambejp様、本当にお世話かけまして申し訳ございません。勉強不足を自覚しつつ、ご指摘通り、以下のように書き換えて見ました。 しかし、例えば、100件ヒットするはずのデータが10件表示されるまではOKなのですが、[次へ]をクリックするとやはり、「該当するデータはありません」と表示されて、残りの90件が表示されません。 ご指摘通りにやったつもりなのですが。どんなお叱りでも受けます。どうぞ、これに懲りずにご助言頂きますようお願い致します。 「form.html」---------------------------- <html> <head> <title>名前と年齢を検索するフォーム</title> </head> <body> <form method="get" action="search.php">//ここを"get"に変更 <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>"; } $search="";//追加部分ここから $name=$_REQUEST["name"]; if(!empty($name)) $search.=($search==""?"":"&")."name=".urlencode($name); $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; if(!empty($age_min) and !empty($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}";//追加部分ここまで //[前へ]リンクの設定 $next_pos = $offset-$ln; if ($next_pos >= 0) { echo("<a href='{$_SERVER['PHP_SELF']}?pos={$next_pos}&{$search}'>[前ヘ]</a>");//$searchの値をGETでつなぐ } //[次へ]リンクの設定 $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}&{$search}'>[次ヘ]</a>");//$searchの値をGETでつなぐ } ?>

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

いや、だからgetで渡すなら、nameやage_min、age_maxの値を渡す・・・ って前回かいたままです <? $search=""; $name=$_REQUEST["name"]; if(!empty($name)) $search.=($search==""?"":"&")."name=".urlencode($name); $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; if(!empty($age_min) and !empty($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}"; print $search; ?> } 実際にご自身の$sqlのデータを「print $sql;」として表示すれば 渡ってないがわかるとおもいますよ

phpsirouto
質問者

補足

yambejp様、夜遅くまでありがとうございます。 >実際にご自身の$sqlのデータを「print $sql;」として表示すれば 渡ってないがわかるとおもいますよ ご指摘通り、渡っていないのが解りました。 [次ヘ]リンクをクリックしただけでは「form.html」の値が引き継がれていないという意味ですよね。「form.html」の値を引き継ぐ為には、どういう記述をすれば良いのでしょうか?それが過去の質問を含めて書いてなかったもので、申し訳ございません。 ちなみに「method=post」で送信しています。 何卒よろしくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

「次へ」の件は、前回のものとはまったく次元の違う問題点です。 name,age_min,age_maxなどの値が引き継がれていないからでしょうね。 そもそもform.htmlから受け渡しはなんのパース処理もいれてないのでしょうか? セキュリティ対策は別途いれるとして最低限 $name=$_REQUEST["name"]; $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; のような処理はいれてデータをとっておき、 次へのurlにパラメータを渡してやらないと、次のページに渡りません。 もしくはセッションをつかったデータの継承を行うのも現実的です。

phpsirouto
質問者

補足

yambejp様、ご返答ありがとうございます。 >「次へ」の件は、前回のものとはまったく次元の違う問題点です。 MySQLからのデータを分割表示する質問は過去の質問にかなりの件数があったのですが、この「1ページに○件ずつ表示する」事への具体的な回答がなく、ここ何週間か悩んでおります。 >$name=$_REQUEST["name"]; $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; のような処理はいれてデータをとっておき、 次へのurlにパラメータを渡してやらないと、次のページに渡りません。 つまり、私が書いた以下のリンク設定の箇所に何らかの記述を追加すれば良いという事でしょうか?丸投げにするつもりはありませんが、よろしければ、具体的なコードを書いて頂けませんでしょうか?ヒントでも結構です。お忙しい中すみませんがよろしくお願いします。 //[前へ]リンクの設定 $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>"); }

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

前回の質問を削除依頼しているということですので、こちらに書きます。 なぜ10件しかヒットしないかは、limitで10件にしぼっているSQLで 行数を数えたら何件?という命題ですから10件になります。 やり方は2つ。 一つはlimitをつかわないで、mysql_num_rowで行数をひっぱれば ただしい行数がえられ、whileで必要な部分だけ抜き出せばよいでしょう。 しかし使用しないデータを抽出するのは無駄がおおいためお勧めはできません。 もう一つは以下のように、limitをしないカウントでSQLを発行して、 実際のデータ抽出はlimitをつけてやるという2段形式 前回の回答者さんがやった方式ですね $sql_0 = "from search where name like '%{$name}%' and age between '$age_min' and '$age_max'"; $sql= "select count(*) as count {$sql_0}"; $res = mysql_query($sql); $row = mysql_fetch_array($res); $num_rows = $row["count"]; $sql= "select name,age {$sql_0} limit $offset,$ln"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)){ ・・・ }

phpsirouto
質問者

補足

yambejp様、ご返答ありがとうございます。ご指摘通り、以下の通りに書き換えてみました。例えば、検索結果で100件あると想定される場合に、「100件ヒットしました」と表示され、表示数も1ページ目に10件しか表示されないので、その部分はOKなのですが、[次へ]をクリックすると、残りの90件が表示されず、「該当するデータはありません」と出てしまいます。やはり、リンク関連箇所の記述に問題があるのでしょうか?色々とお世話かけますが、何卒よろしくお願いします。 <? 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_0 = "from search where name like '%{$name}%' and age between '$age_min' and '$age_max'"; $sql= "select count(*) as count {$sql_0}"; $res = mysql_query($sql); $row = mysql_fetch_array($res); $num_rows = $row["count"]; if($num_rows == 0) $message = "該当するデータはありません"; else $message = $num_rows . "件ヒットしました"; echo "検索結果<br>"; echo "$message"; //SELECTで取得したレコードを出力 $sql= "select name,age {$sql_0} limit $offset,$ln"; $res = mysql_query($sql); 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>"); } ?>

関連するQ&A

  • 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 * from search where name like '%$name%' and price between '$price_min' and '$price_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件ヒットしました」と表示され、その上[次ヘ]をクリックしても「該当するデータはありません」と表示されてしまいます。ちなみにエラー等は出ません。私が書いた上のコードは私なりに色々な参考ページを参照してのものなのですが。 どなたか、上のコードでおかしい箇所などご指摘頂けましたら、幸いでございます。どうぞアドバイスの程よろしくお願い致します。

  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPとMysqlのページ分割表示について

    以前こちらで質問させて頂きまして htmlの検索フォームから入力した情報をデータベースから引っ張ってきて 表示するまでは出来たのですが、表示制限を10個にして、次のページ、前のページと移動させるようなシステムにしたいのですが、うまくいきません(エラーが出てしまいます) どうか、お力をお貸し願えないでしょうか。 search.html <html> <head><title>検索</title></head> <body> <form action="/search/"method="post"> /*page_numを入れた*/ <input type="hidden" name="page_num" value="0"> <li>会社名</li> <li><input type="text"name="name"></li> <li>電話番号</li> <input type="text"name="phone" maxlength="11"> <input type="submit" name="submit" value="検索"> </body> </html> index.php(データベースから情報を引っ張り出す) <?php $host="localhost"; if(!$conn=mysql_connect($host,"usr","passwd")){ die("データベース認証エラー.<br />"); } mysql_select_db("usr",$conn); $condition=""; if(isset($_POST["name"])&&($_POST["name"]!="")){ $name=mysql_real_escape_string($_POST["name"]); $name=str_replace("%","\%",$name); $condition="WHERE name LIKE \"%".$name."%\""; } if(isset($_POST["phone"])&&($_POST['phone']!="")){ $phone=mysql_real_escape_string($_POST["phone"]); $phone=str_replace("%","\%",$phone); if($condition==""){ $condition="WHERE phone LIKE \"%".$phone."%\""; }else{ $condition.="AND phone LIKE \"%".$phone."%\""; } } $tmp=$page_num*10; $sql="SELECT * FROM table".$condition."ORDER BY id limit".$tmp.",10"; while($row=mysql_fetch_array($res)){ print("<table border=\"1\">"); print("<tr><td>会社名</td><td>電話番号</td></tr>"); print("<tr>"); print("<td>".$row['name']."</td>"); print("<td>".$row['phone']."</td>"); print("</tr>"); print("</table>"); } $cnt=$row[0]; //ページ表示 if(!$cnt>10){ echo ceil($cnt/10), "ページの中の",$page_num+1,"ページ目を表示<br>"; } //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } //次の10件 if (($page_num+1)*10<$cnt){ echo "<a href=index.php?name=",$name,".$page_num +1.">"; echo "次の10件"; echo "&g</a>t"; } mysql_free_result($res); //データベースから切断 mysql_close($conn); ?> ちなみにエラーが出ている行はここの //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } >>echo "&lt</a>; この部分がエラーになっています。

    • ベストアンサー
    • PHP
  • MySQLからのデータを「Pager」を使って分割表示する

    はじめまして。PHPとMySQLとPEARのPagerを使った質問なのですが、過去レス等を参考にしながらやってみました。 「form.html」から社員の年齢の最低と最高を入力し、それを「search.php」にgetで渡し、ヒットしたデータの名前と年齢を表示したいのです。 データが多いのでページを1ページに何件かずつ分けて表示したいのですが、「Pager」を使ったやりかたを以下のように書いてみました。 どうしても「Pager」を使ってやってみたいのですが、うまくいきません。 MySQL には(id ,name ,age の3カラムのデータが格納されています) form.html---------------------------------- <html> <head> <title>社員の名前と年齢について</title> </head> <body> <form method="get" action="search.php"> <input type="text" name="age_min"> 歳 ~ <input type="text" name="age_max" > 歳 <input type="submit" name="submit" value="検索"> </form> </body> </html> ---------------------------------------------- search.php--------------------------------------- <html> <head> <title>社員の名前と年齢について</title> </head> <body> <? //ここから http://oshiete1.goo.ne.jp/qa4155006.htmlを参考 $search=""; $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; if(is_numeric($age_min) and is_numeric($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}"; //ここまで http://oshiete1.goo.ne.jp/qa4155006.htmlを参考 //DB接続 require_once ('Pager/Pager.php'); $conn = mysql_connect ("サーバー名", "ユーザー名", "パスワード") or die ('接続できませんでした'); mysql_select_db ("search",$conn); //MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); $sql_1= mysql_query("select count(*) as max from search where age between '$age_min' and '$age_max'"); $row1 = mysql_fetch_array($sql_1); if($row1[max] == 0) $message = "該当者なし"; else $message = $row1["max"] . "人ヒット"; $row1_max = $row1["max"]; echo "検索結果<br>"; echo "$message"; $sql_2= mysql_query("select name,age from search where age between '$age_min' and '$age_max'"); $row2 = mysql_fetch_array($sql_2); //Pagerの導入 $params = array( 'itemData' => $row2, 'mode' => 'Jumping', 'perPage' => 10, 'delta' => 6, 'totalItems' => $row1_max ); //Pagerのインスタンスを生成 $pager = & Pager::factory($params); $links = $pager->getLinks(); $data = $pager->getPageData(); $c_pager = $pager->getCurrentPageID(); $e_pager= $pager->numPages(); print $data["all"]; print $links["all"]; ?> </body> </html> ------------------------------------------------------------------- ページ分割しなければ、「Pager」を使わずに、上のデータ表示箇所を while($row2 = mysql_fetch_array($sql_2)){ echo "<table border='1' cellpadding='0' cellspacing='0'>"; echo "<tr>"; echo "<td>".$row2["name"]."</td>"; echo "<td>".$row2['age']."</td>"; echo "</tr>"; echo "</table>"; } みたいな感じで書き換えればうまく表示されるのですが、「Pager」を使う場合は $data = $pager->getPageData(); でページのデータを返してくれると書いてあったもので、使ってみました。おそらく、 (1)'itemData' => $row2, (2)$data = $pager->getPageData(); (3)print $data["all"]; の3箇所あたりがおかしいかと思っております。どうかよろしくお願いします。

    • 締切済み
    • PHP
  • MySQLでデータ表示

    MySQLでデータの表示を行っています 10件ずつ表示し、11件からは2ページ目に表示したいです サイトや本を見ながらデータ表示と次の10件のリンクは表示されるよう自力で頑張ったのですが 次の10件を押してもデータが変わらず1件目から10件目のままです どこが違うか教えてもらえますか。 どうコードを入力するか教えてくれたらありがたいです 一覧 ta2.phpです <html> <body> <form action = "ta2.php" method="GET"> <input type="hidden" name="page" value="0"> </form> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test" ; $sql.= " limit " . $page*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>"; while($row = mysql_fetch_array($res)) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; header('content-type: text/html; charset="utf-8"'); if ($_GET) { // データがGETされていたら $page = isset($_GET['page']) ? $_GET['page'] : ''; // 取得 } } $sql = "select count(*) from tbl_test " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page != 0) { echo "<a href = ta2.php?page= $page>" ; echo "&lt 前の10件" ; } //次の10件 if (($page + 1)*10 < $cnt) { echo "<a href = ta2.php?page= $page>" ; echo " 次の10件 " ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </table> </body> </html>

    • ベストアンサー
    • MySQL
  • mysql limitページ分割

    前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <html> <body> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; $sql = "limit" . $page_num*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>" ; while($row = mysql_fetch_array($res)){ $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td> </tr>"; //検索条件に該当する全データの件数取得 $sql = "select count(*) from tbl_test " ; $sql = "where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=",$name, ", $page_num -1.">" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=",$name, ", $page_num +1.">" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> Parse error: syntax error, unexpected '前の10件' (T_STRING), expecting ',' or ';' というエラーが出て自分なりにバグを消しているのですがまだエラーが消えずに困っています

    • ベストアンサー
    • MySQL
  • MySQLで昇順に並べ替え

    MySQL(データベース)で商品名と価格を格納したテーブル(syouhin)があります。商品名のキーワードを入力するフォーム(form.html)とデータを受け取る(kensaku.php)があり、以下のようにデータを表示させています。 <!-- form.html --> <html> <head> <title>商品名と価格</title> </head> <body> <form method="get" action="kensaku.php"> <input type="text" name="name"> <input type="submit" name="submit" value="検索"> </form> </body> </html> //kensaku.php <? $name=$_REQUEST["name"]; $conn = mysql_connect ("localhost", "username", "password") or die ('接続できませんでした'); mysql_select_db ("db",$conn); //クエリ生成 $sql = "select * from syouhin where name like '%$name%'"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)){ echo "<table border='1' cellpadding='0' cellspacing='0'>"; echo "<tr>"; echo "<td>".$row[name]."</td>"; echo "<td>".$row[price]."</td>"; echo "</tr>"; echo "</table>"; } ?> ここから質問なんですが、今結果が表示されているまさにそのページで、並べ替えをしたいのです。よく検索結果の並べ替えで、[価格の安い順に並べる]をクリックすると並び変わるのがありますよね。それと同じ事をしたいのです。 僕が考えた方法は、もう一つのページ(例えば、kensaku_asc.php)を作って、 $sql = "select * from syouhin where name like '%$name%'"; の部分だけを $sql = "select * from syouhin where name like '%$name%' order by price"; に変えて、そのページにリンクさせる。でもその場合、form.htmlから受け取ったデータ(ここでは商品名のキーワード)を引き継ぐという事ができないので、そのあたりのところのヒントをいただければと存じます。よろしくお願いします。

    • 締切済み
    • PHP
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • 入れ子のようにしてデータを作りたい。

    よろしくお願い致します。 次のようなコードを書きました。 京都(15) 大阪(18) 滋賀(6) 奈良(23) 和歌山(21) 兵庫(9) というようなファイルを作りたいのですが、 どうもカッコの中に入れる数字がうまく入りません。 また一般的な方法として下記のような発想の 記述でよいのか、御指導をお願い致します。 <table width="100%" align="left"> <?php $con = MYSQL_CONNECT("localhost","*****","*****"); mysql_select_db("net-jp00001"); $res = mysql_query("SELECT pref.pref_id, pref.pref_name FROM pref"); // 表示文字コード if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } $i=0; // クエリの文字の表示 while ($row = mysql_fetch_assoc($res)) { if ( $i >= 3 ){ ?> <form method='POST' action='search_city.php'> <tr align="center" bgcolor="#FCFFD0"> <? $i=1; }else{ $i++; } ?> <td width="5" height="21" colspan="1" align="left" bordercolor="1" bgcolor="#FCFFD0"> <input type="radio" name="pref_id" value="<?php echo $row['pref_id'] ?>"> </td> <td width="200"colspan="11" align="left" bordercolor="1" bgcolor="#FCFFD0"> <label><font size="-1"><?php echo $row['pref_name'] ?></font></label> <?  //この部分でエラーが出て記述方法がわかりません。 $pref = $row['pref_name']; $res1 = mysql_query("SELECT count(*) as city_id FROM pref INNER JOIN city ON pref.pref_id = city.pref_id WHERE pref.pref_name = $pref_name"); list($num) = mysql_fetch_row($res1); echo "(".$num.")"; ?> </td> <? } ?> </tr> <tr align="left" bgcolor="#D0FFF8"> <td height="21" colspan="12" bordercolor="1"> <input name="submit" type='submit' value='市区エリアへ'> </td> </tr> </form> </table>

    • ベストアンサー
    • PHP
  • ページ間の値の受け渡しについて

    緊急でPHPを用いて開発しなければならず、値の受渡し方法が調べても 結果がうまく出来ないために教えて下さい。 説明がうまくできないので、ソースの一部を下記に記載しております。 【keikaku.php】 <?php $link = DB接続 $query = "SELECT (1) , (2) , (3) FROM KEIKAKU WHERE 営業所= '東京'"; $res_result = mysql_query($query,$link); echo ("<form action='keikaku_input.php' method='POST'>"); while($row = mysql_fetch_array($res_result)){  echo ("<table border=1>");  echo ("<tr>");  echo ("<td><input type='radio' name='name' value=''></td>");  echo ("<td>");  echo $row['(1)'];  echo ("</td><td>");  echo $row['(2)'];  echo ("</td><td>");  echo $row['(3)'];  echo ("</td>");  echo ("</tr>"); } echo ("<input type='submit' value='次へ'>"); echo ("</form>"); ?> というSQLで一覧を表示させて、対象行のラジオボタンが選択されると (1)と(2)の値を使い、【keikaku_input.php】で更に別のSQLを実行後に 結果を表示させる事を行ないたいのです。 【keikaku.php】→【keikaku_input.php】へ(1)と(2)の値を渡したい場合 はどのようにすれば良いかご教授願えませんでしょうか?

    • ベストアンサー
    • PHP