• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPとMysqlのページ分割表示について)

PHPとMysqlのページ分割表示について

このQ&Aのポイント
  • PHPとMysqlを使用して、ページ分割表示を実装する方法について教えてください。
  • 質問者は、検索フォームから入力した情報をデータベースから取得し、表示制限を10個に設定し、次のページと前のページに移動できるシステムを作りたいとしています。
  • エラーが発生しており、特に前の10件を表示する部分でエラーが発生しているようです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

$resを使う前に、 $res = mysql_query($sql); if ( ! $res ) { die('Invalid query: ' . mysql_error());} を入れてみてください。 なぜ必要なのかは、以下のURLの解説がわかりやすいと思います。 http://park18.wakwak.com/~little-box/Dreamweaver/sql009.htm

NZXT
質問者

お礼

今まで、色々と教えて下さりありがとうございました。 後は自分で頑張って解決してみます。 本当に感謝しています。

NZXT
質問者

補足

ご指摘ありがとうございます。 下記の通り入れたところエラーもなくなり一覧表示しました。 $res = mysql_query($sql); if ( ! $res ) { die('Invalid query: ' . mysql_error());} ですが、肝心の//ページ表示//次のページ//前のページが表示されません。 検索のフォームのhtmlでは <input type="hidden" name="page_num" value="0"> にてGETにてデータを以下のPHPに引渡ししているのですが、引き渡された後がうまくいきません。 色々と試していますが駄目です。 今登録されている件数が11件であれば//次の10件の部分が表示されるはずなのですが。 不思議とhtmlのvalue="1"にすると、//前の10件の部分は表示されるようになりました。 $page=mysql_real_escape_string($_GET["page"]); $cnt=$row[0]; //ページ表示 if(!$cnt>10){ echo ceil($cnt/10),"ページの中の",$page +1,"ページ目を表示<br>"; } //前の10件 if($page!=0){ echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num -1).">"; echo "&lt;</a>"; echo "前の10件"; } //次の10件 if(($page+1)*10<$cnt){ echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num +1).">"; echo "次の10件"; echo "&gt;</a>"; } mysql_free_result($res); //データベースから切断 mysql_close($conn); ?> 2日間もお付き合いいただき本当にありがとうございます。 もし面倒で無ければアドバイスいただけたらと思います。 アドバイスいただけなくても、superside0さまをベストアンサーにさせて頂きます

すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.5

---- > 5.echo "&lt</a>;から echo "&lt"; echo "</a>";に変更 じゃなくて... &ltの後にセミコロンがいるっていうのは、PHPの構文終わりのセミコロンがいるという意味でなく 「小なり」を表示するための HTMLは "&lt"じゃなくて "&lt;" ですよって 意味です。 (&ltでも 多分、ブラウザが補完して表示してくれるんだろうけど。ブラウザ依存させないほうがいいので、一応) なので、そこは echo "&lt"; echo "</a>"; にするんじゃなくて echo "&lt;</a>"; です。 -------------- $sql.="limit" .$tmp.",10"; これでは、結果の$sqlが "~ ORDER BY gyosya_idlimit10,10" になってしまって前より悪化しているので、 $sql.=" limit " .$tmp.",10"; です。 (” ”内で、'limit'って文字の前後に ブランクを入れる) ----------- 「あと、$sqlに文字列を代入しただけで、これをMySQL上で実行してない」 の件が 解決してないので、構文エラーがでなくてなっても、 mysql_fetch_array($res)の行で、空のエラーになるはず。 SQL文を作る→そのSQLを実行して結果を格納する→その結果を1つづつ取り出す→結果を解放する という行程の2つ目が抜けてます。 --------- syntax error, unexpected T_IF in /home/search/index.php on line 105 の件は、多分、その行そのものではなくて、 その前で、;が抜けているとか、 { や } や ( ) が 全角になっているとか 全角の空白を使っているとかかも。 丁寧にトレースすれば、発見できるはずです。 ---------- (目視で気になったとこだけなので、実際に動かすとまだ問題はあるかもしれないですけど・・・)

NZXT
質問者

補足

度々、ありがとうございます。 コツコツと訂正しました。 するとようやく、一欄は表示されましたが、検索フォームに入力するとエラーを吐いてしまいます。 superside0さまがおっしゃりました ----------- 「あと、$sqlに文字列を代入しただけで、これをMySQL上で実行してない」 の件が 解決してないので、構文エラーがでなくてなっても、 mysql_fetch_array($res)の行で、空のエラーになるはず。 SQL文を作る→そのSQLを実行して結果を格納する→その結果を1つづつ取り出す→結果を解放する という行程の2つ目が抜けてます。 --------- お恥ずかしいのですが、 ここの部分がよくわからないのです。 前述のエラーは解消したようですが、$resのところの部分だけがエラーの箇所と指摘されました。 おそらくsuperside0さまがおっしゃってます箇所>>mysql_fetch_array($res)の行で、空のエラーになるはず。 を解決したいのですが、この場合どのようにすれば良いのですか? 本当に初心者でごめんなさい。

すると、全ての回答が全文表示されます。
回答No.4

"ORDER BY id limit".$tmp.",10"; だと "ORDER BY id limit10,10" になってしまうから、 "limitのあとに ブランクが入るように$sqlを作らないとまずくないかな。 あと、$sqlに文字列を代入しただけで、これをMySQL上で実行してないのに その結果を期待している$resが突然発生しているのも おかしいですね。 それと、 echo "<a href=index.php?name=",$name,".$page_num -1.">"; は #3さんの言われているように構文(カンマや"の数)もおかしいけど、 GETデータで複数のパラメータ引き渡したいなら echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num -1).">"; みたいになるはず。 その前に、この$page_numって変数もまだ準備できてないので、利用する前に $page_num =mysql_real_escape_string($_GET["page_num"]); とかやっとかないと。 あと、最初のフォームは、<form action="/search/"method="post"> でPOSTデータにしてるけど、ページ分割したときのリンクは <a href=index.php?name=".$name ~ > っていうGETデータにするなら if(isset($_POST["name"])&&($_POST["name"]!="")){  $name=mysql_real_escape_string($_POST["name"]); や if(isset($_POST["phone"])&&($_POST['phone']!="")){  $phone=mysql_real_escape_string($_POST["phone"]); じゃ取り出せなくなるから 最初のフォームをGETに変更してPHPを$_POSTから$_GETにするか PHP側をどっちでもいけるように $_POSTから  $_REQUESTに変更するか。 他にもいろいろ、HTML側の構文ミスもありそうだけど・・・・ たとえば、 echo "&g</a>t"; は echo "&gt;</a>"; じゃないかな。 echo "&lt</a>; も "の閉じ忘れ以外に、 &ltの後のセミコロン抜けてる感じ。

NZXT
質問者

お礼

補足のところ間違えました。 ごめんなさい 1.訂正した箇所はphp側の$_POSTを$_GETに変更です。 お時間を頂いてすいません。

NZXT
質問者

補足

きめ細かなご指摘ありがとうございます。 早速訂正しましたが、まだエラーが出てしまいます。 1.訂正した箇所はphp側の$_POSTを$_REQUESTに変更 2.>>GETデータで複数のパラメータ引き渡したいなら echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num -1).">"; echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num +1).">"; に変更しました 3.$page_num =mysql_real_escape_string($_GET["page_num"]);を追加 4.echo "&g</a>t";からecho "&gt;</a>";に変更 5.echo "&lt</a>;から echo "&lt"; echo "</a>";に変更 以上を訂正しましたが //次の10件 if (($page_num+1)*10<$cnt){ echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num +1).">"; echo "次の10件"; echo "&gt"; echo "</a>"; } ここの if (($page_num+1)*10<$cnt){ 部分が以下のようなエラーコードが出てしまいます syntax error, unexpected T_IF in /home/search/index.php on line 105 あともう少しなのですが、うまくいきません。 ・・・略 $page_num=mysql_real_escape_string($_REQUEST["page_num"]); $tmp=$page_num*10; $sql="SELECT * FROM gyosya_list".$condition."ORDER BY gyosya_id"; $sql.="limit" .$tmp.",10"; while($row=mysql_fetch_array($res)){ print("<table border=\"1\">"); print("<tr><td class=\"m_nam\">会社名</td><td class=\"m_pho\">電話番号</td></tr>"); print("<tr>"); print("<td class=\"g_nam\">".$row['gyosya_name']."</td>"); print("<td class=\"g_pho\">".$row['gyosya_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."&phone=".$phone."&page_num=".($page_num -1).">"; echo "&lt"; echo "</a>"; echo "前の10件"; } //次の10件 if (($page_num+1)*10<$cnt){ echo "<a href=index.php?name=".$name."&phone=".$phone."&page_num=".($page_num +1).">"; echo "次の10件"; echo "&gt"; echo "</a>"; } ・・・略

すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 なんか、単純な記述ミス・・・? echo "<a href=index.php?name=",$name,".$page_num -1.">"; これもおかしいです。 カンマとピリオドを間違えてる? どちらにしても、ダブルコーテーションの数が合ってないです。 echo "&lt</a>; これは#2さんがおっしゃるように、閉じ忘れですかね?

NZXT
質問者

お礼

こんばんは 記述ミスみたいでした #4さんがおっしゃっていただいた方法に訂正しました。 ですが、まだエラーが出てしまいます。 PHPは始めたばっかりなのでわからない事だらけです。 わざわざこんな自分のために回答していただいてありがとうございました。

すると、全ての回答が全文表示されます。
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

× echo "&lt</a>; ○ echo "&lt</a>"; っていうこと?

NZXT
質問者

お礼

ご指摘ありがとうございます。 直してみましたが、他にも間違えがあるようです。 探してみます。 本当にありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

>> この部分がエラーになっています。 技術系の質問はエラー文そのものが解決方法です。 エラー文を記述してください。 そのほうがソースをダラダラと記述するよりも回答者に優しいと思いますが。

NZXT
質問者

補足

>>そのほうがソースをダラダラと記述するよりも回答者に優しいと思いますが。 申し訳ございませんでした。 こちらがエラーコードになります。 宜しくお願いします。 Parse error: syntax error, unexpected '/' in /home/index.php on line 70

すると、全ての回答が全文表示されます。

関連するQ&A