• 締切済み

mysql 検索後のページング

現在商品管理のページを作成しておりまして 検索後のページングに関してちょっと困っておりまして ご相談に伺った次第です。 商品検索は出来るのですが、ページ数が多い場合は 次ページボタンをクリックして次のページを表示 させるんですが、なぜかデータペースで登録したの最初ページに戻ってしまうと言う現象が起こってしまっております。 できたらこれにand検索を付けたいと思っているんですが、 いろいろ見させてもらっているんですがうまくいかないので 是非ご教授願いたいです。 <?php $search = $_POST['search']; $currentPage = $_SERVER["PHP_SELF"]; $maxRows = 30; $pageNum = 0; if (isset($_GET['pageNum'])) { $pageNum = $_GET['pageNum']; } $startRow = $pageNum * $maxRows; $query = "SELECT * FROM shop where concat(name, pref, address) like '%$search%'"; $query_limit = sprintf("%s LIMIT %d, %d", $query, $startRow, $maxRows); $list = mysql_query($query_limit, $conn) or die(mysql_error()); $row = mysql_fetch_assoc($list); if (isset($_GET['totalRows'])) { $totalRows = $_GET['totalRows']; } else { $all = mysql_query($query); $totalRows = mysql_num_rows($all); } $totalPages = ceil($totalRows/$maxRows)-1; $queryString = ""; if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum") == false && stristr($param, "totalRows") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString = "&" . htmlentities(implode("&", $newParams)); } } $queryString = sprintf("&totalRows=%d%s", $totalRows, $queryString); ?> (ページ出力省略) <table width="280" border="0" align="center" cellpadding="5" cellspacing="0"> <tr> <td width="130"><form id="form2" name="form2" method="post" action="<?php printf("%s?pageNum=%d%s", $currentPage, max(0, $pageNum - 1), $queryString); ?>"> <?php if ($pageNum > 0) { // 最初のページは非表示 ?> <input type="submit" name="Submit4" value="←前のページ" /> <?php } ?></form> </td> <td width="130" align="center" valign="top"><form id="form3" name="form3" method="post" action="<?php printf("%s?pageNum=%d%s", $currentPage, min($totalPages, $pageNum + 1), $queryString); ?>"> <?php if ($pageNum < $totalPages) { // 最終ページは非表示 ?> <input type="submit" name="Submit5" value="次のページ→" /> <?php } ?></form> </td> </tr> </table> </div> </body> </html> ソースコードを載せておきますのでご指摘よろしくお願いします。 MySQLバージョン4.1.7 phpバージョン 4.3.9 です。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

AND検索にしたい場合は $search をスペースでsplitやexplodeで分割して like '%$search%'" をつなげればいいと思います。 $array = split(" | ",$search); $sql .= "A = 'A"; $sql .= " join("' and concat(name, pref, address) like '",$array); $sql .= "'"; # 適当に作ったので間違っているかも。 ページングは見たところ間違っていないように見える(なにか見落としてたらごめんなさい)ので、引数が正しいかや、値をちゃんと受け取っているかを調べてみてください。

AESmd5hash
質問者

お礼

早速ありがとうございます。早速試してみたいと思います。 ページングはもう一度作り直してみます。 どこかで間違っているかもしれないと思います。

関連するQ&A