• 締切済み

ページング実装で2ページ目以降が全件表示してしまう

検索システムの検索結果を分割表示する仕組みを作っているのですが、1ページ目は問題無く思った通りに表示されます。 しかし、2ページ目以降はすべて全件表示してしまいます。 「◯件中△件表示」というのは正常に動作しています。 いろいろ試行錯誤する中で、$queryの中身が2ページ目以降はwhere句等が外れてしまっているのが原因だということがわかりました。 じゃあ2ページ目以降にもきちんとそれらが反映されるように手直ししていこうということなのですが、どう対処していいかにつまづいています。 いろいろ情報を見ながら何度もチャレンジしているのですがうまくいきません。 2ページ目以降が全件表示ではなく検索結果として1ページ目の続きとして表示させるためにどうすればいいか、アドバイスをいただけないでしょうか。 よろしくお願い致します。 ※以下に今回の該当箇所のコードを記載します。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "DBユーザー名"; $pass = "DBパスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } define('NUM_SHOPS', 10); error_reporting(E_ALL & ~E_NOTICE); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } $offset = NUM_SHOPS * ($page - 1); //クエリ生成 $query = "SELECT * FROM テーブル名"; //検索条件抽出 $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } if (count($where) <> 0) { $query .= "limit " . $offset . ", " . NUM_SHOPS; } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); //検索結果件数カウント $query = "SELECT COUNT(id) FROM テーブル名"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC'; } $total = mysql_result(mysql_query($query), 0); $from = $offset + 1; $to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <!--検索結果表示画面始まり--> ~~~~~省略~~~~~ <!--検索結果表示画面終わり--> <!--以下、ページリンク--> <p> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page - 1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= ceil($total / NUM_SHOPS); $i++) : ?> <?php if ($page == $i) : ?> <strong><?php echo $i; ?></strong> <?php else : ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < ceil($total / NUM_SHOPS)) : ?> <a href="?page=<?php echo $page + 1; ?>">次</a> <?php endif; ?> </p> </body> </html>

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

いろいろ突っ込みどころ満載過ぎるソースなんだけど ・非推奨のmysql関数を使っている。 現在はmysqliやPDOを使うことが推奨されている。 PHPの公式のリファレンスマニュアルすら読まない無能? ・今時プレースホルダを使わずにエスケープ処理を使っている ・変数の存在チェックすらしない?isset()すらせずにerror_reportingでごまかすという非常識ソース。 >error_reporting(E_ALL & ~E_NOTICE); >if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { >$page = (int)$_GET['page']; >} else { >$page = 1; >} などなど

lolololol
質問者

お礼

厳しいご指摘ありがとうございます。 指摘して頂いた点一つ一つ見なおしてみます。

回答No.1

PHP自体は知らないので間違ってるかもしれないですが、次ページへのリンクにareaがセットされていない(URLパラメータに含まれていない)ために、「if (count($where) <> 0) { ... }」の部分の処理が飛ばされている(whereもlimitも追加されない)のではないでしょうか。

lolololol
質問者

お礼

ご指摘ありがとうございます。 参考にさせていただきます。

関連するQ&A

  • 検索結果の分割表示時のSQLエラー

    PHP, MySQLで検索システムを作り、検索結果の分割表示をしようとしています。 その際、SQL文にエラーが生じるのですが、原因が調べてみてもわかりません。 検索条件のSQL文内のNUM_SHOPSという部分を数値に変えると1ページ目はきちんと分割表示されますが2ページ目以降が全件表示されてしまいます。 そして、NUM_SHOPSの部分をそのままにすると、SQLがエラーを起こします。var_dumpで$queryを確認すると、SQL文が二重に入ってしまっているのですが、どうしてこのような現象が起きるのかがいまいちわかりません。 アドバイス、ご指摘等いただけないでしょうか。 よろしくお願い致します。 以下に該当箇所のコードを記載します。 【result.php】 <?php require_once('config.php'); require_once('functions.php'); connectDb(); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } $offset = NUM_SHOPS * ($page - 1); //クエリ生成 $query = "SELECT * FROM テーブル名"; //検索条件抽出 $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } if (count($where) <> 0) { $query .= "limit " . $offset . ", NUM_SHOPS" ; } var_dump($query); //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); //検索結果件数カウント $query = "SELECT COUNT(id) FROM テーブル名"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC'; } $total = mysql_result(mysql_query($query), 0); $from = $offset + 1; $to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) : $total; ?> 【config.php】 <?php define('DB_HOST', '*************'); define('DB_USER', '*************'); define('DB_PASSWORD', '*************'); define('DB_NAME', '*************'); //ページごとのショップ数 define('NUM_SHOPS', 10); //エラー表示 error_reporting(E_ALL & ~E_NOTICE); 【functions.php】 <?php function connectDb() { mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("can not connect to DB:".mysql_error()); mysql_select_db(DB_NAME) or die("can not select DB: ".mysql_error()); } function h($s) { return htmlspecialchars($s); }

    • ベストアンサー
    • PHP
  • PHPでのページング処理についての質問です。

    ドットインストールにてページングの勉強をしています。 http://dotinstall.com/lessons/paging_php_v2/8510 件数が多いと、 この場合ですと10ページ以上まで表示されてしまうかと思うのですが、 よくあるWEBサービスのように10ページまでで区切り、 10ページ目をクリックすると、 5ページから15ページまでを表示させたいのですが、 どのように書いていくものでしょうか? <?php define('DB_HOST', 'localhost'); define('DB_USER', 'dbuser'); define('DB_PASSWORD', '********'); define('DB_NAME', 'dotinstall_paging_php'); define('COMMENTS_PER_PAGE', 5); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } error_reporting(E_ALL & ~E_NOTICE); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } // select * from comments limit OFFSET, COUNT // page offset count // 1 0 5 // 2 5 5 // 3 10 5 // 4 15 5 $offset = COMMENTS_PER_PAGE * ($page - 1); $sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE; $comments = array(); foreach ($dbh->query($sql) as $row) { array_push($comments, $row); } $total = $dbh->query("select count(*) from comments")->fetchColumn(); $totalPages = ceil($total / COMMENTS_PER_PAGE); // var_dump($comments); // exit; $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>コメント一覧</title> </head> <body> <h1>コメント一覧</h1> <p>全<?php echo $total; ?>件中、<?php echo $from; ?>件~<?php echo $to; ?>件を表示しています。</p> <ul> <?php foreach ($comments as $comment) : ?> <li><?php echo htmlspecialchars($comment['comment'],ENT_QUOTES,'UTF-8'); ?></li> <?php endforeach; ?> </ul> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page-1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= $totalPages; $i++) : ?> <?php if ($page == $i) : ?> <strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong> <?php else: ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < $totalPages) : ?> <a href="?page=<?php echo $page+1; ?>">次</a> <?php endif; ?> </body> </html>

    • ベストアンサー
    • PHP
  • ページングでの問題点

    <?php DB接続文等 $search_query = "select SQL_CALC_FOUND_ROWS * from ilab"; $usersearch= $_POST['usersearch']; $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; ?> <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このソースだとテキストボックスに未入力だと、全件表示してしまいます。 そして、例えば、「東京」等で検索し、12とリンクがつくわけですが、2を押したら東京の2の情報ではなく、全件データの2(10件~20件)が表示されてしまいます。どうすれば上記問題点を改善できるでしょうか??

    • 締切済み
    • 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
  • SQLエラー

    検索システムの検索結果の分割をしようとしています。 しかしどうしてもSQL文にエラーがでてしまいます。 SELECT * FROM shops where (area='◯◯◯') ORDER BY id DESC limit0, 10 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit0, 10' at line 1 該当するSQL文は以下になります。 $query = "SELECT * FROM shops"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; }   $query .= "limit" . $page_num*10 . ", 10" ; limit句の使い方等間違いはないのかなと思うのですが、いかがでしょうか? アドバイスご教示いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの簡易データ検索プログラムを書いていますがページャーを使ったデー

    PHPの簡易データ検索プログラムを書いていますがページャーを使ったデータ連動でうまくいかないところがあります。問題は1のデータ数取得がどのように2回(カウント+本検索)クエリを投げれば良いか判りません。どうかご教授いただきますようお願いします。 <?php require_once "./rank/config.php"; require_once("Pager/Pager.php"); //【1】カウント用データベースに接続 $link = mysql_connect($server, $usr, $pass); $db = mysql_select_db($mydb, $link); $query = "SELECT COUNT(*) FROM detail WHERE category = '".$ID."'"; $count = mysql_query($query); //【1】データ数の取得 $limit = $count; $page = empty($_GET['p']) ? 1: $_GET['p']; $offset = ($page - 1) * $limit; // クエリ条件部分 $query = "SELECT * FROM detail"; $query .= " where 1"; $query .= " and category = '".$ID."'"; $query .= " limit {$limit} offset {$offset}"; $flag = true; //MySQLデータベースに接続 if(!$link = mysql_connect($server, $usr, $pass)){ $flag = false; } //データベース選択 if(!$db = mysql_select_db($mydb, $link)){ $flag = false; } //lolipop用 mysql_set_charset("utf8"); //クエリ実行 if(!$result = mysql_query($query)){ $flag = false; } if(mysql_num_rows($result)==0){ echo 'データ件数は0件です'; } $rows = mysql_num_rows($result); if ($flag == true){ //メイン出力部 while($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $list[] = array(category =>$row["category"],area=>$row["area"]); } }else{ echo 'データベース接続エラー'; } echo "<b>", $rows, "</b>件HITしました<br />\n"; $params = array( 'mode' => 'sliding', 'perPage' => $limit, 'itemData' => $list, 'firstPagePre'=>'=', "firstPageText"=>"TOP", "firstPagePost"=>"=", "lastPagePre"=>"=", "lastPageText"=>"LAST", "lastPagePost"=>"=", ); $pager = & Pager::factory($params); $navi = $pager->getLinks(); print($pager->numItems()."件中<br/>"); $scope = $pager->getOffsetByPageId(); print($scope['0']."件目から".$scope['1']."件目を表示 <br/>"); $ary = $pager->getPageData(); foreach ($ary AS $key => $value) { echo "<br>□1<br>".$value["category"]."<br>"; echo "□2<br>".$value["area"]."<br>"; echo "<hr>"; } echo $navi['all']; //SQLの解放 mysql_free_result($result); mysql_close($link); ?>

    • 締切済み
    • PHP
  • mysql内データを降順件数指定表示

    タイトル通り、mysql内のデータを降順で件数指定して表示しようとしていますが、 どうしてもうまくいきません。 var_dumpでチェックしても問題ないように思われるのですが、うまくいかないということで見落としているミスの箇所があると思われるのですが、つまづいてしまいます。 以下にコードを載せますので、どなたかアドバイスをいただけないでしょうか。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } //クエリ生成 $query = "SELECT * FROM shops ORDER BY id DESC limit 4"; $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>新着情報</title> </head> <body> <p>場所:<?php echo $row['area']; ?></p> <p>店名:<?php echo $row['name']; ?></p> </body> </html>

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

  • myaql php ページャー total

    検索機能プラスページャー機能を作っているのですが$totalが取れません。 echo $total;にしても数字が出てきません。 検索機能をつけずに元あるデータからはうまくいきました。 ご教授お願いいたします。 ソースは下記です <?php $cityid=$_POST['city']; $brandid=$_POST['brand']; $syasyu=$_POST['ysasyu_sentaku']; $page = 1; $limit = 2; $offset = $limit * ($page - 1); $dsn='mysql:dbname=****host=mysql1.**** $user=***; $password=***** $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); if($brandid=='') { $sql='SELECT COUNT (*)FROM zyoho WHERE cityid=? OR brandid=?'; }else{ $sql='SELECT COUNT (*) FROM zyoho WHERE cityid=? AND brandid=?'; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $db=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? LIMIT '.$limit.' OFFSET '.$offset; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=? LIMIT '.$limit.' OFFSET '.$offset; } $stmt = $dbh->prepare($sql); var_dump($data); $stmt->execute($data); $db = null; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row['naiyo']; echo'</br>'; } echo '<ul class="pager">'; ?> <?php if($page > 1){?> <li><a href="pager.php?page=<?php echo $page-1; ?>"> << </a></li> <?php }。 for($i = $page; $page-2 < $i && $i <= $page+4 && $i <= $lastpage; $i++){ ?> <?php if($i == $page){ ?> <li><a href="kensaku_pager.php?page=<?php echo $i; ?>"><?php echo '<font color="#FF4DC4">'.$i.'</font></a></li>'; }else{?> <li><a href="pager.php?page=<?php echo $i; ?>"><?php echo $i.'</a>'; ?> <?php echo '</li>'; } }。 if($page < $lastpage){ ?> <li><a href="pager.php?page=<?php echo $page+1; ?>"> >> </a></li> <?php } ?> </ul>

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

専門家に質問してみよう