- ベストアンサー
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 "< 前の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> すみませんが、ご存知の方いましたら、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
連投すみません。 そちらが #2の補足に提示されたソースを PHPエディタにコピペした所、中括弧が全角になっている部分が2ヶ所ありましたが、そちらのソースでは 大丈夫でしょうか? > } > //↓↓↓まだここのエラーとeclipseが表示。。 > //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 > if(($page_num+1)*10<$cnt){ > echo "<a href = kensaku.php?nm=".$nm.",".$page_num+1 .">"; > echo " 次の10件 &g</a>t"; > } もしかして、シンプルなパースエラー?
その他の回答 (4)
- bm_hiro
- ベストアンサー率51% (200/388)
いろいろツッコみ所がありますが、せめてエラーメッセージを教えてください。
補足
bm_hiroさん、ご丁寧にありがとうございます。 今、手元にeclipseのPCないので、明日、エラーMSGもふまえて、試してみます。。m(_ _)m。 連続して、返答いただけるのは、私的にか迷惑ではないので、御気になさらずに、逆に感謝です。 でも、本日試せなくて、すみません。
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
デバックする方法を、もう少し勉強した方が良いと思いますが ^ ^; アルゴリズム的な問題は無視して、記述されたスクリプトを読むと・・・ >$sql.="limit".$TMP.",10" ; $sql.="limit△".$TMP.",10" ; △は半角スペースですが・・・分かりませんでしたか ^ ^; >//↓↓↓まだここのエラーとeclipseが表示。。 >//次の10件.--ここからエラー行ですが、、解決策がわかりません。。 >if(($page_num+1)*10<$cnt){ >echo "<a href = kensaku.php?nm=".$nm.",".$page_num+1 .">"; eclipseの経験ないので、どのようなエラーか不明ですが、下記の記載があるので、 >$nm=$_POST['nm']; >$page_num=$_POST['page_num']; href=kensaku.php?nm=(数字)&page_num=(数字)と記述する形式です。 「=kensaku.php?nm=".$nm.",".$page_num+1 .">」は、上記の形式になっていないです!! 「=kensaku.php?nm=".$nm."&".$page_num+1 .">」 「,」を「&」に置き換えるが正解と思います。 でも・・・POSTではなくGETでないですか? FORMでの受け渡しなど基礎的なことが違って気がしますよ
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
LIMIT 使ってましたね ^ ^; > $sql.="limit" . $page_num * 10 . ", 10" ; 計算式を直接記述しているのが不味いとお思います。 「$page_num * 10」 TMP= $page_num * 10; $sql.="limit" . $TMP . ", 10" ; バックスラッシュが有効なら・・・ $sql.="limit" . `$page_num * 10` . ", 10" ; デバックですが・・・ >echo "SQLエラー<BR>" ; echo "SQLエラー[$sql ]<BR>" ; とした方が分かり易いです
補足
qaz_qwerty_me さん ご指摘があった箇所訂正してみましたが、無理でした。。。 でも、お答え頂いた事に感謝してます。ありがとうございます。 私自身もがんばってみますが、解決策ご存知の方いましたら、すみませんが、教えていただけないでしょうか? //訂正後のkensaku.phpです、 <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if(!$conn =mysql_connect("","user","pass")) { echo "接続エラー" ; exit ; } //データベースを選択 if(!mysql_select_db("member",$con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 //ご指摘があった訂正箇所↓↓↓ $TMP=$page_num*10;//訂正箇所 $sql = "select id,name from member " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit".$TMP.",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 "< 前の10件"; } //↓↓↓まだここのエラーとeclipseが表示。。 //次の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> すみません。教えてください。。
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
まじめにコードを読んでいないので・・・外しているかも知れませんが SQLを使っているならページ制御は Limit句を使うのが簡単で確実&早い? と思います。 これで先頭から3行 select できます (SQL)... Limit 0, 3; 取り合えず見つけたURL http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm
お礼
bm_hiroさん,たびたびすみません。。 おかげ様で解決しました。 上記の補足の部分はsqlデータdbの選択ミスですした。。 お恥ずかしい限りです。。。 でも、GETの件や{の全角の指摘がなければ、解決しませんでした。 本当に、私のような、初心者の質問にも回答いただけこと感謝したします。ありがとうございました。 また、掲示板で見かけたら、すみませんが、お願いいたします。
補足
bm_hiroさん、ありがとうございます。 いろいろやってみましたが、SQLエラーに変わりした。。 エラーMSGはeclipseのエラーですが データベース選択エラーSQLエラー[]2 id name Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 34 SQLエラー SQLエラー[select count(*) from member where name like '%安%' order by id ]4 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 49 Warning: mysql_free_result():66 ソースは(汚くてすみません) <html> <body> <?php $nm=$_GET['nm']; $page_num=$_GET['page_num']; //データベースに接続 if(!$conn =mysql_connect("","user","pass")){ echo "接続エラー" ; echo "SQLエラー[$sql]1<BR>" ; } //データベースを選択 if(!mysql_select_db("member",$conn)){ echo "データベース選択エラー" ; echo "SQLエラー[$sql]2<BR>" ; } //LIMITを使ったSELECT文を作成 $TMP=$page_num*10; $sql ="select id,name from member where name like '%$nm%' order by id limit ".$TMP.",1"; //SQL実行 if(!$rs = mysql_query("SET NAMES 'sjis' ",$conn)){ echo "SQLエラー<BR>3" ; echo $TMP."<br>"; echo $page_num; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; //--ここが↓34行目エラー while($row=mysql_fetch_array($rs)) { echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ;} echo "</table>" ; //検索条件に該当する全データの件数取得 $sql2 = "select count(*) from member " ; $sql2.="where name like '%$nm%' order by id " ; if(!$rs=mysql_query($sql2,$conn)) { echo "SQLエラー<BR>" ; echo "SQLエラー[$sql2]4<BR>";} //--ここが↓49行目エラー $row = mysql_fetch_array($rs) ; $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 "< 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if(($page_num+1)*10<$cnt){ echo "<a href = kensaku.php?nm=".$nm."&".$page_num+1 .">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 //--ここが↓66行目エラー mysql_free_result($rs); //データベースから切断 mysql_close($conn); ?> </body></html> 多分$rsの箇所のエラーだと思いますが、解決策がまだ。。 私もいろいろ試してみますが、 ご存知の方いましたら、教えていただけないでしょうか?