他のクエリを保持したまま、ページ番号だけを変えたい

このQ&Aのポイント
  • 検索ボックスに入力されたクエリを基に検索する、search.phpを作成しました。queに格納されているキーワードを検索して、50件ずつ表示します。
  • ページ下部には前へ 次へとあり、それぞれページひとつ前、ページひとつ次のURLがあるのですが、このURLはクエリによって動的に変化します。
  • 他のクエリを保持したまま、ページ番号だけを書き換えるにはどのようにすればいいのでしょうか。
回答を見る
  • ベストアンサー

他のクエリを保持したまま、ページ番号だけを変えたい

検索ボックスに入力されたクエリを基に検索する、search.phpを作成しました。 queに格納されているキーワードを検索して、50件ずつ表示します。 このとき search.php?que=[検索キーワード]&cat=[検索カテゴリ]&page=1 で検索結果の1ページ目、 search.php?que=[検索キーワード]&page=2 で検索結果の2ページ目が表示されます。 ページ下部には 前へ 次へ とあり、それぞれページひとつ前、ページひとつ次のURLがあるのですが、このURLはクエリによって動的に変化します。 search.php?que=aaa&cat=abc&page=4 なら前へ:search.php?que=aaa&cat=abc&page=3 、 次へ:search.php?que=aaa&cat=abc&page=5 search.php?que=bbb?page=4 なら前へ:search.php?que=bbb?page=3 、 次へ:search.php?que=bbb?page=5 このように、それ以外のクエリを保持したまま、ページ番号だけを書き換えるにはどのようにすればいいのでしょうか。 よろしくお願いします。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

クエリは$_SERVER["QUERY_STRING"]で拾えるので 合致する文字を足したり引いたりすればよいです ただし、page=1のひとつ前はpage=0、page=0のひとつ前はpage=-1 になっちゃうので、その辺を処理する場合は工夫が必要です <?PHP $q=$_SERVER["QUERY_STRING"]; $pattern="/(?<=(?<=^|&)page=)\d+?(?=&|$)/e"; $replacement="$0-1"; $pre= preg_replace($pattern,$replacement,$q); $replacement="$0+1"; $next= preg_replace($pattern,$replacement,$q); print "<a href=\"".$_SERVER["SCRIPT_NAME"].($pre!==""?"?":"").$pre."\">前</a>"; print "<a href=\"".$_SERVER["SCRIPT_NAME"].($next!==""?"?":"").$next."\">後</a>"; ?>

spinia0120
質問者

お礼

なるほどです。 ありがとうございました。

関連するQ&A

  • 検索結果のハイライト処理がうまくできない

    現在、勉強がてらPHPで簡単な検索エンジンを作っています。 $keyword="aaa bbb ccccc"; というキーワードが変数中に有り、検索キーワードが $query="bbb"; とした場合、検索結果の画面で aaa <bbb> ccccc(<>内は背景黄色で太文字のハイライト処理部分。<>は非表示) としたいのですが、うまくいきません。 現在は、 $keyword=mb_eregi_reqlace($query,"<span style=\"background:yellow;\"><strong>$query</strong></span>",$keyword); としています。 これだと、正常にbbbの部分がハイライトされる反面、キーワードBBBで検索をかけたときに検索結果が aaa <BBB> ccccc となってしまいます。 BBBで検索をかけても aaa <bbb> ccccc という感じで検索結果を表示させたいのですが、何か良い方法が有りましたらご教授いただけると幸いです。 よろしくお願いします。 現在の具体的な例 $keyword="keyword planetarian keyword2...";→登録されてるキーワードの一部 $query="ARIA";→検索語句 出力 keyword planet<ARIA>n keyword2... 希望してる出力 keyword planet<aria>n keyword2... 雑文ですみません。 意味の分からない部分が有れば補足しますので、どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ページの識別をクエリでやらせる意味は?

    ネット上で、以下のようなアドレスをもったサイトを見かけることがあります。 http://www.abc.com/?page_id=company http://www.abc.com/?page_id=product http://www.abc.com/?page_id=support http://www.abc.com/以降のファイル名が省略されていますが、おそらくindex.cgiだかindex.phpだかのサーバーサイドプログラムが置いてあって動作しているのだと思います。クエリpage_idの値を取得し、それによってプログラムで表示するページの内容を変えているのだと思いますが、なぜわざわざこのような方法と使っているのでしょうか?それぞれcompany.htmlまたはcompany/index.htmlのようにhtmlファイルを用意する方が簡単だと思うのですが。phpなどのプログラムはSEOに弱く、SEOを気にするなら文書データであるhtmlデータの方が良いと聞いたこともあります。

  • 検索機能とページ送りについて

    はじめまして。 検索機能とページ送り(ページング)の実装について方法を模索中です。 category/ ├ page001.html ├ page002.html ├ page003.html ├ page004.html ├ page005.html ├ page006.html ├ page007.html ├ page008.html ├ page009.html ├ page010.html ├ page011.html ├ page012.html ├ page013.html ・ ・ ・ ○現在、全てHTMLのみの静的ページ ○検索機能を実装、検索結果ページは「ページ送り」を実装したい。 ex.[前へ] 1 2 3 4 5 [次へ] 他サイトや質問を参考にJQueryやPHPを用いた方法などがあるところまでは分かったのですが、 例えば、下記のようなサイトはどのような方法を用いているのか分かりません。 http://www.google.co.jp/search?~ http://www.brand-index.jp/search?min_sale_price=8000&max_sale_price=15000 など、「search?~」はどのような言語を用いて実装しているのでしょうか? もし分かれば、実装の選択肢に入れたいと思ってますので、ご教授をお願いいたします。

  • 【PHP】ページの切り替えについて

    HTML で frameset を使用し、例えば、各frame で name="page1" name="page2" name="page3"などと名前をつけて page2 の名前のページを abc.php のページにリンクで変更する場合、page2 のページ内のソースで <a href="abc.php" target="page2">ページ4</a> とし、イメージ的には下記の(1)図の様な感じで、target で指定した frame のページの所だけ abc.php のページに切り替えることができますが (1)図 ┌─────┐    ┌─────┐ │  page1   │    │  page1  │ ├─────┤    ├─────┤ │  page2   │ →  │ abc.php  │ ├─────┤    ├─────┤ │  page3   │    │  page3  │ └─────┘    └─────┘ この仕組みを PHP で、例えば、xyz.php のページで <?php require("page1.php");?> <hr> <?php require("page2.php");?> <hr> <?php require("page3.php");?> require を使用し各ページを読み込み(1)図の様な感じのフレーム式にした場合、page2.php のページからリンクで、page2.php のページだけを abc.php のページに切り替える場合どうしたら良いのでしょうか? イメージ的には下記の(2)図の様な感じです。 (2)図 ┌─────┐    ┌─────┐ │ page1.php │    │ page1.php │ ├─────┤    ├─────┤ │ page2.php │ →  │ abc.php │ ├─────┤    ├─────┤ │ page3.php │    │ page3.php │ └─────┘    └─────┘ ※ 図の線の歪みは気にしないで下さい。すみません。

    • 締切済み
    • PHP
  • Googleで検索しているとき、URLで絞り込みってどうやるの?

    こんばんは。 検索をしていて、ふと思ったのですが、キーワード+ある特定のURLってどうやって検索するのでしょうか? Googleで AAA社の商品BBBを、AAA BBB で検索したら、50,000件もヒットしました。 そこで、絞り込みをしたいのですが、ヒットしたページ 50,000件のうち、 URLに AAA を含むものを絞り込みをしたいのですが、どうすればよいですか? わかる方教えてください、お願いします。 また、Google以外で、上のようなことができる検索サイトを知っていれば教えて下さい。 よろしくお願いします。

  • 検索結果($_POST)が2ページ目以降は消える

    PHP+MySQLで分割ページを作っています。 検索結果のページを分割しているのですが、2ページ目以降に検索されたレコードが表示されません。 1).2ページ目以降に続きのレコード(下記では21件目以降)を表示させるには、どうすれば良いのでしょうか。 2).上記には関係ないのですが、「<?= $msg ?>」で検索結果の総数を表示したいのですが、「1」としか表示されません…ついでで良いので、ご指摘いただけたらと思います。 <?php $keyword = $_POST['keyword']//検索ワードになります、下記の例では使用していません ?> <?php //データベース接続 $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); // 最終ページを取得する $sql = 'SELECT COUNT(*) AS cnt FROM table1'; $result = mysql_query($sql); $rows = mysql_fetch_assoc($result); $maxPage = ceil($rows['cnt'] / 20); $page = min($page, $maxPage); $start = ($page - 1) * 20; $result = mysql_query('SELECT * FROM table1 LIMIT ' . $start . ',20'); $rowss = mysql_num_rows($sql); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["mail"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = "".count($rowss).""; }else{ $msg = "sorry"; } //結果保持用メモリを開放する mysql_free_result($result); ?> //下記から、HTML部に表示しています <?php $start_a = ($start + 1); print "".$start_a."件~"; $start_b = ($start + 20); print "".$start_b."件を表示しています(".$page."ページ目/全".$maxPage."ページ)<br>"; if ($page > 1) { print "<a href=\"page.php?page=".($page - 1)."\">前のページへ</a>  "; } else { print "前のページへ"; } if ($page < $maxPage) { print "<a href=\"page.php?page=".($page + 1)."\">次のページへ</a>  "; } else { print "次のページへ"; } ?> <?= $msg ?> 何卒、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • クエリ付きURLをクエリ無しURLにリダイレクト

    お世話になります。 旧サイトの”クエリ付きURL”を新サイト”クエリ無しURL”にリダイレクトさせる方法が知りたいです。よろしくお願いいたします。 以下は、旧サイトのクエリ付きURLです。 旧サイトURL /index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0&lang=en /index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0&lang=ja /index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0 /index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62 /index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4 以下の新サイトのクエリ無しURLに301でリダイレクトしたいです。 新サイトURL /brand/devoa

  • youtubeの個々の動画ページについて

    現在phpのプログラムを勉強しています。 youtubeの検索結果ページや個々の動画視聴ページURLを見て気になったのですが、 https://www.youtube.com/results?search_query=[検索キーワード] https://www.youtube.com/watch?v=[動画の識別コード] のようなURLの場合、 ?以降のserch_query=[検索キーワード]やv=[動画の識別コード]は$_GETの取得だということは分かるのですが、 ?直前のresultsやwatchは何を表しているのでしょうか? 結果表示ページや視聴ページはそれぞれコンテンツ(検索キーワードや動画コード)だけを書き換えれば、 ページ自体は共通の型となるプログラムファイルを使うのが効率的だと思うので、resultsやwatchはその型となるファイルのファイル名かと思っているのですが、 ファイルの拡張子がなく、$_GETのデータが記述されているのは拡張子を隠しているからでしょうか? また、URLをresultsやwatchまで記述してページを読み込んでみたところ、 TOPページに飛ばされました。 これは、resultやwatchのプログラム内で、取得する$_GETのデータが存在しない場合、TOPページに戻すという仕組みを記述しているからでしょうか? また、最近のWEBページはほとんどがURLにファイルの拡張子がないように見受けられますが、 ファイルの拡張子というのは隠した方が良いのでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 1ページ目の検索窓に文字列を入れて次のページで検索

    教えてgoo(OKwave)のように、1ページ目の検索窓に文字列を入れて、 次のページで検索結果を表示するには、どのようなプログラミング言語を習得すれば可能でしょうか? URLを見ると、search_option.php3となっていることから、 PHPを習得すればこのようなサイトを作れますか?

  • pg_queryのエラー

     テキストボックスに入力された単語をスペースで区切って、それをSQL文に入れてデータベースを検索するプログラムを書いたのですが、ある特定のキーワードを入力すると以下のようなエラーが出ます。 Warning: pg_query(): Query failed: ERROR: invalid byte sequence for encoding "SJIS": 0x9125 in /**パス**/search.php on line 58 ↑は「早期」というキーワードを入れて検索した時に出たものです。DBには「早期終了」というデータがあるのですが、この場合は引っ掛かりません。「終了」というキーワードで検索すると出てきます。 クエリに失敗したというのは分かるんですが、SJISが出てくる意味が分りません。 文字コードの問題でしょうか? これはどうやったら解決できるんでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう