• 締切済み

MySQLによる一定件数表示

私は、PHPとMySQLを使ってHPを作成している初心者です。多数の参考書スクリプトを改造しながらやっています。私のHPではMySQLに登録してあるデータを全件表示する工程は考えていません。ドロップダウンメニュー1つとテキストボックスが3つある検索ページから検索して、その検索したデータを10件ずつ表示するやり方をしたいと考えています。現時点では、最初の10件は表示されるものの、「次ページ」以降が表示されません。2000文字以内の規定があるようなので飛び飛びになってしまうと思いますが、スクリプトを出来る限り記載しますのでご指摘いただけたら幸いです。 ※まずは、このようにempty関数を使って入力なしでの検索を回避 if( empty($検索項目1) && empty($検索項目2) && empty($検索項目3) && empty($検索項目4) ) { /* 何も入力がない場合 */ print "検索項目に何も入力がありません。\n"; ※部分一致検索のスクリプト /* 検索(部分一致検索) */ $query = " 検索項目1のフィールド名 LIKE '%" . $検索項目1 . "%' AND 検索項目2のフィールド名 LIKE '%" . $検索項目2 . "%' AND 検索項目3のフィールド名 LIKE '%" . $検索項目3 . "%' AND 検索項目4のフィールド名 LIKE '%" . $検索項目4 . "%'"; ※上記$queryを使って1ページ当りの表示件数を設定するスクリプト ※検索の一覧を表示するスクリプト 検索結果一覧<br><br> <table border="0"> <TR> <TH>一覧の題名部分のスクリプト</TH> </TR> <?php //結果セットからデータをループで読み込み while ($col = mysql_fetch_array($sql)) { ?> <TR> <TD>一覧を表示させるスクリプト</TD> </TR> <?php } print "</table>\n"; ※ページ移動用リンクの組み立てをするスクリプト //各ページ番号への直接移動用 for ($cnt = 1; $cnt <= $pgmax; $cnt++) { $startprm = ($cnt - 1) * $ROWMAX; $link .= "<A href='$_SERVER[PHP_SELF]?pgmax=$pgmax&start=$startprm&検索項目1のname属性=$検索項目1&検索項目2のname属性=$検索項目2&検索項目3のname属性=$検索項目3&検索項目4のname属性=$検索項目4'>$cnt</A>&nbsp;&nbsp;"; } //1つ次のページへの移動用 if ($curpage < $pgmax) { $startprm = $curpage * $ROWMAX; } else { $startprm = ($curpage - 1) * $ROWMAX; } $link .= "<A href='$_SERVER[PHP_SELF]?pgmax=$pgmax&start=$startprm&検索項目1のname属性=$検索項目1&検索項目2のname属性=$検索項目2&検索項目3のname属性=$検索項目3&検索項目4のname属性=$検索項目4'>></A>&nbsp;&nbsp;"; 大変長くて申し訳ありません。あと、前ページ・先頭ページ・最終ページのスクリプトの中にも同じように検索ページから入力された内容(値)を渡すようにGETで組んでみたのですが、最初の1ページ目が表示されるだけで「次ページ」以降が表示されません。リンク番号を見ると検索の内容分のデータは読み込まれている感じはします。また、empty関数を取り除いてしまうと、リンクはうまくいくのですが、登録されている全件に対しての表示になってしまいます。分かりづらいと思いますが、どうかご指導の程よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

MySQLを使っているならページングにはLIMIT句を使用しましょう。

choku15
質問者

お礼

ご指摘ありがとうございます。

関連するQ&A

  • phpphp,mysqlページングについて

    1つのphpファイルで作成を考えています。検索後(if($subsub){}を消せば)でなければページング機能は、可能です。1ページ目は、正常に表示しますが、2ページ目以降表示できません。データ保持ができません。同じ類の質問は、たくさん出てると思いますが・・・初心者ということもあり、ロジックがまだわかっていないのでできれば記述で教えていただければ幸いです。よろしくお願いします。 検索項目は、1項目で省略していますが、本来4~5項目で考えています。 <?php // データベースに接続する 省略 $test = $_POST[test]; echo' <form method="POST" action="".$_SERVER["PHP_SELF"].""> <tr> <input type="text" name="test"> <td><input type="submit" value="検索" name="subsub"></td> </form> '; //検索ボタンを押したら表示 if((isset($_POST['subsub']))or(isset($_GET['p'] ))){ //ページング処理 //総レコード数を取得する //条件がある場合は、where 条件式を書く $sql = "SELECT COUNT(*) AS reccnt FROM faq;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $reccnt = $row["reccnt"]; //取り出す最大レコード数 $lim = 3; //最初と最後のページ番号を定義 $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; //SELECTコマンドを実行して、$stレコード目から$lim件の各データを取得し、大きい順に並べる $sql = "SELECT test FROM testtest WHERE test like '$test' ORDER BY id DESC LIMIT $st, $lim;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); echo' <table border="1"> <tr> <td>ID</td> <td>テスト</td> </tr> '; //取得したデータを一件ずつ表示 while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo' <tr> <td>'.$row["id"].'</td> <td>'.$row["test"].'</td> </tr> '; } echo '</table>'; //ページ移動リンクの組み立て //1ページ前のページ if ($p > 1) { echo "<font size=\"1\"><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=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a></font>&nbsp"; //表示番号を指定数に区切る //ページ番号と現在のページが同一の場合は //リンク無しにする if ($cnt <= $p + $page) { if ($cnt == $p) { $pageno = "<font size=\"1\">$p</font>&nbsp"; } echo $pageno; } } //1ページ後のページ if (($next1 - 1) * $lim < $reccnt) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$next1\">></a></font>&nbsp"; } echo "<br>\n"; //最初のページへ移動 if ($p > 1) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a></font>&nbsp"; } //前の$pageページへ移動 if ($p > $page) { // << を $page"."ページ戻る にする事もできる echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a></font>&nbsp"; } //次の$pageページへ移動 if (($next - 1) * $lim < $reccnt) { // >> を $page"."ページ進む にする事もできる echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a></font>&nbsp"; } //最後のページへ移動 if ($p < $last) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a></font>&nbsp"; } } ?>

    • ベストアンサー
    • 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を用いたページを作成しています。 ページを左と右の二つにわけてて、 左のソースは <html> <head> <title>単漢字学習</title> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <H2>単漢字検索項目</H2> <P><b>検索項目を入力して下さい<P>(複数選択可)</P></b></P> <form name="form1" action="demo2.php" method="post" target="migi"> 漢字直接入力エリア <TEXTAREA name = "chokusetsu" cols="5" rows="2" wrap="off"></TEXTAREA><BR><BR> </TEXTAREA> 漢字読み入力エリア <TEXTAREA name = "yomi"cols="5" rows="2" wrap="off"></TEXTAREA><BR><BR> </TEXTAREA> <P>画数</P> <SELECT name="kakusuu"> <OPTION value="" selected>----画数を選択してください----</OPTION> <OPTION value="1">1画</OPTION> <OPTION value="2">2画</OPTION>   中略 </SELECT><BR><BR> <P>部首</P> <SELECT name="busyu"> <OPTION value="" selected>----部首を選択してください----</OPTION> <OPTION value="一部 いち">一部 いち</OPTION> <OPTION value="│部 ぼう">│部 ぼう</OPTION>   中略 </SELECT><BR><BR><BR> <input type="submit" value="送信"> <input type="reset" value="リセット"> </body> </html> となっていて 右ページのソースは <?php require_once("mysql.php"); ?> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <input type="hidden" name="ie" value="UTF-8"> <title>7-4 MySQLクラスでのデータの表示</title> </head> <body> <b>入力された条件&nbsp;&nbsp;&nbsp;&nbsp;</b> <?php print "直接入力:"; print $_POST['chokusetsu']; print "&nbsp;&nbsp;&nbsp;&nbsp;読み:"; print $_POST['yomi']; print "&nbsp;&nbsp;&nbsp;&nbsp;画数:"; print $_POST['kakusuu']; print "&nbsp;&nbsp;&nbsp;&nbsp;部首:"; print $_POST['busyu']; print "&nbsp;&nbsp;&nbsp;&nbsp;の検索結果"; $search_key1 = addslashes($_POST['chokusetsu']); $search_key2 = addslashes($_POST['yomi']); $search_key3 = addslashes($_POST['kakusuu']); $search_key4 = addslashes($_POST['busyu']); $mysql = new MySQL; $sql = "SELECT * FROM tankanji WHERE (onyomi like '%$search_key2%' OR kunyomi like '%$search_key2%') AND kanji like '%$search_key1%' AND busyu like '%$search_key4%' AND kakusuu like '%$search_key3%'"; $mysql->query($sql); // 検索件数の表示 ?> <TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3"> <TBODY> <TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH><TH>部首</TH><TH>画数</TH></TR> <?php while($row = $mysql->fetch()){ ?> <TR> <TD align="center"><?=$row['id']?></TD> <TD align="center"><?=$row['kanji']?></TD> <TD align="center"><?=$row['onyomi']?></TD> <TD align="center"><?=$row['kunyomi']?></TD> <TD nowrap align="center"><?=$row['busyu']?></TD> <TD align="center"><?=$row['kakusuu']?></TD></TR> <?php } ?> </TBODY></TABLE> </body> </html> こんな感じです。 現在では左ページのテキストボックスやプルダウンメニューから操作をしてデータを右ページに送らなくても右ページにはテーブルが出現してしまってます。この現象を左ページからデータ入力があった場合のみテーブルを表示させたいのですが、このようなことはできるのでしょうか? 誰か詳しい方お願いします。

    • ベストアンサー
    • HTML
  • 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 sqlエラー

    先ほども質問したのですが再度質問させていただきます mysql limitページ分割を行っていてエラーは消せたのですが今度 SQLエラーになり出来ません 前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <body> <?php error_reporting(E_ALL ^ E_NOTICE); //データベースに接続 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 '%{$_GET['name']}%') or (住所 LIKE '%{$_GET['name']}%')"; $sql = "limit" . $page * 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 + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=".$name. ". $page -1.>" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=".$name. ". $page +1.>" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; } ?> </body> </html>

    • ベストアンサー
    • 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
  • 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)

    添付画像のような、医院名のクッキーを、ドメイン内で発行しているのですが、 このようなクッキーの値そのものがクッキー名である場合、下記のようなスクリプトでは 当然同じクッキーの内容の値が表示されます。 (かと言って、$_COOKIE["hospital[i]"] のような書き方だとうまく動作しません) 添付画像のような別々のクッキーを、連続して画面に表示してやるにはどうすればいいのでしょうか?どういうスクリプトを書けばいいのか、教えていただけますでしょうか。 ------------------------------------------------------------------------------------------------- for($m=0; $m<$_SESSION['cnt']; $m++){ if(isset($_COOKIE["$hospital"])){ echo '<tr><td cellpadding="3"><div class="moji1">&nbsp;&nbsp;&nbsp;<a href="detail.php?tab=1&sid='.$sid.'&iinmei='.$iinmei.'&from=0&chuumoku_flag=1">'.$_COOKIE["$hospital"].'</a></div><div class="moji2">&nbsp;&nbsp;&nbsp;<img src="../image/tokei.png">'.$date.'</div></td></tr>'; } }

    • ベストアンサー
    • PHP
  • 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
  • PHPでMySQLを使った検索のプログラム

    「たったコレだけでPHPプログラミングが理解できる本」を参考にPHPでプログラムを書いていまして、 ビジネスホテルの検索機能をチェックボックス機能を余分につけて検索できないか試したのですが、 チェックボックスにチェックを入れると全く検索できず他のテキストボックスに入力するだけなら検索できます。 なんとかチェックボックスを有効にできないかいろいろなサイトを調べたり本を読んだりしましたが解決策が見つかりません。 いろいろな機能に対応できるようなプログラムを組みたいと思ったのでかなりの初心者で大変恐縮ですが、どなたかご教授お願いできないかと思っております。 あと参考になるサイトがございましたら、教えていただきたいと思っております。 何卒よろしくお願い致します。 前半省略 <form name="search_form" action="" method="post" > <input type="hidden" name="cmd" value="search" /> <table> <tr> <th>物件種別</th> <td> <input type="checkbox" name="kodawari_key[]" value="温泉" <?php if( $_REQUEST["kodawari_key"] == "温泉" ){ print( 'checked' ); } ?>/> 温泉 <input type="checkbox" name="kodawari_key[]" value="ランチ" <?php if( $_REQUEST["kodawari_key"] == "ランチ" ){ print( 'checked' ); } ?>/> ランチ<br /> <input type="checkbox" name="kodawari_key[]" value="ディナー" <?php if( $_REQUEST["kodawari_key"] == "ディナー" ){ print( 'checked' ); } ?>/> ディナー</td> </tr> <tr> <th>価格帯</th> <td> <input type="text" name="price_min" value="<?php print( htmlspecialchars( $_REQUEST["price_min"] ,ENT_QUOTES ) ) ?>" size="8"> ~ <input type="text" name="price_max" value="<?php print( htmlspecialchars( $_REQUEST["price_max"] ,ENT_QUOTES ) ) ?>" size="8"><br /> </td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_REQUEST["address"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> </table> <input type="submit" value="検索" class="Btn-gray button"> </form> <p>&nbsp;</p> <?php if( $_REQUEST["cmd"] == "search" ){ $pdo = new PDO("mysql:host=localhost; dbname=hotel_reservation; charset=utf8", "koredake", "koredake123", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $sql = "select * from hotels where 1 = 1 "; $condition = array(); if( !empty( $_POST["kodawari_key"] )){ $sql = $sql . " and kodawari_key = :kodawari_key"; $condition["kodawari_key"] = $_REQUEST["kodawari_key"]; } if( !empty( $_REQUEST["price_min"] ) ){ $sql = $sql . " and price >= :price_min "; $condition[":price_min"] = $_REQUEST["price_min"]; } if( !empty( $_REQUEST["price_max"] ) ){ $sql = $sql . " and price <= :price_max "; $condition[":price_max"] = $_REQUEST["price_max"]; } if( !empty( $_REQUEST["address"] ) ){ $sql = $sql . " and ( pref like :pref or city like :city or address like :address ) "; $condition[":pref"] = "%{$_REQUEST["address"]}%"; $condition[":city"] = "%{$_REQUEST["address"]}%"; $condition[":address"] = "%{$_REQUEST["address"]}%"; } $statement = $pdo->prepare( $sql ); $statement->execute( $condition ); $results = $statement->fetchAll(); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>ホテル名</th> <th>宿泊料金</th> <th>住所</th> </tr> <?php foreach( $results as $result ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $result["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $result["hotel_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $result["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $result["pref"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["city"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div> </body> </html>

    • ベストアンサー
    • MySQL

専門家に質問してみよう