• 締切済み

キーワードの再検索で

index.phpからキーワードを書きだし、search.phpで$_GETで受け取り→エンコード→ リクエストURLまでセットし、表示されるまでは問題ないのですが、ソート順を変更した際にリクエストURLに2回、キーワードが入ってしまいます。ブラウザのアドレスバーをみると、エンコードされた値(%e3%81%bf%e3%81%8b%e3%82%93(みかんみかん)と言う感じにが2回入ってしまいます。それを、ソートを変更しても、キーワードを1回だけ入れるには、どのようにしたらいいのでしょうか? [index.php] <p><a href="search.php?keyword=みかん&sort=standard">みかん</a></p> [search.php] <?php $base = 'http://xxx.xxxxxx.co.jp/xxx/xxx'; $keyword =$_GET["keyword"]; $keyword = urlencode($keyword); $sort = $_GET["sort"]; $sort = urlencode($sort); // リクエストURL $url = $base ."&keyword=".$keyword."&sort=".$sort. ; ?> 表示順序 <form action="<?=$_SERVER["PHP_SELF"]?>" method="get"> </select> <input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>"> <select name="sort"> <option value="satandard">新着</option> <option value="itemPrice">安い</option> <input type="submit" value="検索"> </select> よろしくお願いいたします。

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

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

ANo.1です >$url = $base."?Id=" .$id ."&keyword=".$keyword."&sort=".$sort. ; この時点での$urlは問題ないと思います。ただ「この$urlをどう使っているのか?」がわかりません。表示順序のソースではフォームのactionは$_SERVER["PHP_SELF"]になっていますので。 PHP_SELF自体、他の方が指摘されているように使うべきではありませんし、フォーム内にidがhiddenで含まれていないのが謎です(何のために$urlにidを含めているのか・・・)。 (蛇足) urlencodeに関しては、index.phpでの <p><a href="search.php?keyword=みかん&sort=standard">みかん</a></p> で「みかん」をそのまま書いていることを指摘しています。今現在問題なくても他の文字列にしたときに思わぬ動作になる可能性を排除できません。基本的にマルチバイト文字を入れるときにはurlencodeしておくべきでは?(当然search.phpは問題ありません)。

a4orece
質問者

補足

$urlのidですがweb apiを利用しておりますのでweb apiのidになります。(リクエストurlも本当はもっと長いのですが、質問で長くすると分からなくなりますので必要な部分だけで質問させていただいてます。) $urlは,web apiから $xlm=simplexml_load_file($url); としております(肝心なところが抜けてすいませんでした)。 商品名などを取得し、search.phpで表示しています。 PHP_SELFのところですが、このページ(search.php)でソートを変更する場合、フォームのactionはどのようにすれば、良いのでしょうか? 表示順序 <form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get"> で大丈夫でしょうか? あとindex.phpのエンコードのところですが、search.phpと同じような感じで $keyword ="みかん"; $keyword = urlencode($keyword); <p><a href="search.php?keyword=$keyword&sort=standard">みかん</a></p> か <p><a href="search.php?keyword=%e3%81%bf%e3%81%8b%e3%82%93&sort=standard">みかん</a></p> としないとだめなのでしょうか? 長くなってすいません。よろしくお願いいたします。

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

PHP_SELFは脆弱なので最近はあまり使われないようですね SCRIPT_NAMEをつかいましょう。

a4orece
質問者

お礼

ご指摘ありがとうございます。SCRIPT_NAMEにしました。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>// リクエストURL >$url = $base ."&keyword=".$keyword."&sort=".$sort. ; この$urlをどう使っているのでしょうか?「?」がないのでanchor要素のhref属性に書いていたら動作しないのではないかと思うのですが・・・ search.phpではurlencodeしているのに、index.phpでは生のマルチバイト文字を書いているのも不思議です。

a4orece
質問者

補足

ご回答ありがとうございます。 リクエスurlが間違ってました。 // リクエストURL >$url = $base ."&keyword=".$keyword."&sort=".$sort. ; 部分ですが $id='xxxxxxxxxx'; $url = $base."?Id=" .$id ."&keyword=".$keyword."&sort=".$sort. ; search.phpではurlencodeしているのに、index.phpでは生のマルチバイト文字を書いている所ですが、その部分も若干が理解できてなく、index.phpのキーワード(みかん)をsearch.php側で$_GETしてエンコードはできないのでしょうか? index.php側でエンコードさせてから、search.phpに渡さないとダメなのでしょうか? よろしくお願いいたします。

関連するQ&A

  • PHP apiのソート順について質問

    menu.phpでキーワード(りんご)で書き出した後は、問題なく りんご(ソート順:スタンダード)が表示されるのですが、さらに、search.phpでソート順を変えて検索するとソート順はリクエストURLに反映されるのですが、キーワード’(りんご)がリクエストURLに入りません。 search.phpでmenu.phpのキーワード(りんご)繰り返しし使うにはどのようにしたら、いいのでしょうか? [menu.php] <p><a href="search.php?word=りんご&sort=standard">りんご</a></p> [search.php] <?php $base = 'http://xxx.xxxxxx.co.jp/xxx/xxx'; $word =$_GET["word"]; $keyword = urlencode($word); $sort = $_GET["sort"]; $sort = urlencode($sort); // リクエストURL $url = $base ."&keyword=".$keyword."&sort=".$sort. ; ?> 表示順序 <select name="sort"> <option value="satandard">新着順</option> <option value="itemPrice">価格の安い順</option> <option value="-itemPrice">価格の高い順</option> <input type="submit" value="検索"> </select> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP ソートについて

    以前も、似たような質問をしたのですが少し内容が違いますのでよろしくお願いいたします。 このページ内で、ゲットしたキーワードを再ソートすると、2回エンコードされてしまいます。続けてまた、ソートすると、エンコードされた値がまたエンコードされてしまいます。、始めにゲットした値を1回だけエンコードし、ソートを変えても1回目のエンコードされた値を使うにはどのようにしたらよいのでしょうか? $base = 'http://xxx.xxxxxx.co.jp/xxx/xxx'; $keyword =$_GET["keyword"]; $keyword = urlencode($keyword); $sort = $_GET["sort"]; $sort = urlencode($sort); $url = $base ."&keyword=".$keyword."&sort=".$sort. ; <form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get"> <input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>"> 表示順序 <select name="sort"> <option value="satandard">新着順</option> <option value="Price">安い順</option> <option value="-Price">高い順</option> <input type="submit" value="検索"> </select> </form>

    • ベストアンサー
    • PHP
  • 「次の○件」の時、値がデフォルトにもどってしまいます。

    MySQLとPHP4で検索システムを作っています。 検索結果を20件ずつ表示させ、21件目から「次へ」をクリックすることで表示させてるのですが、「次へ」をクリックしてもうまく表示ができません。 キーワードはurlencodeを使って解決したのですが、プルダウン(コンボボックス?)を使ったOrderByの設定がデフォルトに戻ってしまいます。 urlencodeを使ってできなかったので、どのようにしたらよいのか、ご教授をお願い致します。 イメージだけでも御参考になれば… 「キーワード<input type="text">」を(書名順・著者名順)で 検索<input type="submit"> この( )の部分を以下のようにし、 html <SELECT name="sort"> <OPTION value="title">書名</OPTION> <OPTION value="auth">著者名</OPTION></SELECT> php $sort=$_POST[sort]; //または、GET if($sort=="title"){ $sql .="order by title "; }elseif($sort=="auth"){ $sql .="order by auth "; } のようにやってます。

    • ベストアンサー
    • PHP
  • 既存エンジンを利用したHTML&PHPの検索・取得は不可能?

    PHPで、URL抽出をしたいと思っています。 たとえば、gooのブログ検索などの検索エンジンを利用して、 そこから返されたURLの取得、 もしくは返されたHTMLのソース取得の どちらかをしたいと思っています。 つまり、既存の検索エンジンを利用したいと思っているのですが・・・ とりあえずこんなHTMLをかいたのですが。 ______________________________________________________________________________ <form method="get" action="http://blog.search.goo.ne.jp/search_goo/result/" id="query_top"> <label for="searchtop">検索:</label> <input type="text" name="MT" value="" id="searchtop" size="45">  スコア  <select name="rm"> <option value = '0'>全部</option> <option value = '1' selected>1 以上</option> <option value = '2'>2 以上</option> <option value = '3'>3 以上</option> <option value = '4'>4 以上</option> <option value = '5'>5 以上</option> </select> <input type="submit" name="btn_g" class="gbbtn_search" value="gooブログ検索"></form> _____________________________________________________________________________________ これはただHTMLでフォームを作って、gooにキーワードを飛ばすだけなのですが、 この後表示される(帰ってくる)URLをPHPなどで取得することはできないでしょうか? 取得して、違うプログラムで利用したいと考えています。 しかし、個人的に色々考えたのですが、PHPだと物理的に無理な気がしてきました。 ただ、HTMLに埋め込むならPHPがいいのかなと思いました。 だれかわかる人いますでしょうか?どうかPHPに精通している方、ぜひ宜しくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • データベースからのキーワード検索

    いつもお世話になっております。 PHP初心者です。 あるデータベースから条件を指定して検索するPHPがあります。 セレクトボックスの選択項目とキーワード検索があったものを、キーワード検索だけ使いたくてセレクトボックスを削除するとキーワード検索が動かなくなりました。 元はこういうものです <table border="0" cellpadding="0" cellspacing="0" class="seachbox"> <tr> <form name="form1" method="get" action="list.php"> <td align="right"><table border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="middle">&nbsp;</td> <td>キーワード</td> <td>&nbsp;</td> </tr> <tr> <td valign="middle"><select name="munic" class="style_12px_BL" id="serch01" onChange="AreaList(this.options[selectedIndex].value)"> <option value ="9999" selected>指定しない</option> <?php $sql = "select Mu_id,Mu_name from Munic_table order by Mu_order"; $rs = mysql_query($sql); while($row=mysql_fetch_array($rs)){ print("<OPTION value=". $row["Mu_id"] . ">". $row["Mu_name"] . "</OPTION>?n"); } ?> </select></td> <td><input name="key" type="text" value="" size="20" maxlength="30"> </td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input type="image" src="image/serch_but.gif" alt="検索" id="serch01" width="65" height="20" border="0"></td> </tr> </table></td> </tr> </table> <input name="fn" type="hidden" id="fn" value="sr"></td> </form> </tr> </table> この状態だとキーワード検索が動くのですが、select部分を削除すると検索結果のページにエラーが出てキーワードが反映されません。 中程にあるPHPに何らかの指定が必要なのだと思うのですが、どう書けばよいかわからない状態です。 宜しくお願い致します。

    • 締切済み
    • PHP
  • HTTP_Request2で検索結果を取得したい

    pearのHTTP_Request2を使ってサイト内の検索結果を取得したいのですが、 どうにもうまく取得できなくて困っております。 ■やりたいこと 対象サイトをクックパッドにしたいと思います。 http://cookpad.com/search 料理名、食材名のフリーワードのところに例えばキムチと 入力して、その検索結果を表示したい(http://cookpad.com/search/%E3%82%AD%E3%83%A0%E3%83%81)と思っているのですが、リクエストがうまくいかず、上記URLのページがそのまま返ってきてしまいます。ソースは以下です。 <?php require_once "HTTP/Request2.php"; require_once "Net/URL2.php"; $request = new HTTP_Request2('http://cookpad.com/search', HTTP_Request2::METHOD_GET, array('use_brackets' => true)); $url = $request->getUrl(); $url->setQueryVariables(array( 'keyword' => 'キムチ' )); $url->setQueryVariable('commit', 'レシピ検索'); echo $request->send()->getBody(); 一体、どこが間違っているのでしょうか? 下記URLを参照して試みたのですが、どうにもうまくいきません。 お手数ですが、ご教授いただけますと幸いです。 参照ページ http://pear.php.net/manual/ja/package.http.http-request2.request.php

    • ベストアンサー
    • PHP
  • プルダウンから、遷移先のurlに、&genrename=○○と追加付与

    プルダウンから、遷移先のurlに、&genrename=○○と追加付与したいのですが、うまくいきません。 ▽現状 <form action="search.php" method="get"> キーワード:<input type="text" name="keyword" size="40"> <select id="genreid" name="genreid"> <option value="0">すべての商品</option> <?php foreach ($hits as $hit) { ?> <option value="<?php echo ($hit->genreId); ?>"> <?php echo ($hit->genreName); ?> </option> <?php } ?> <input type="submit" value="検索"> </select> </form> ▽新たに追加して飛ばしたい内容 <?php echo ($hit->genreName); ?>の部分 ▽試したこと <input type="hidden" name="genrename" value="<?php ($hit->genreName); ?>"> とやると、&genrename=○○と追加付与されたのですが、文字がエンコードされたような状態になりました。 そこで、お伺いしたいのですが、 ・プルダウンから、遷移先のurlに、&genrename=○○と追加付与する場合は、input type="hidden"でよいのでしょうか?(option valueの値送信は必要なので、それに追加して、という意味です) ・input type="hidden"で送信すると、勝手に何かに変換されるのでしょうか? ・最終的に、$genrename=$_GET["genrename"];という形で取り込みたいのですが、きちんと日本語表示させるにはどうしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • キーワード検索ができたのに,できなくなりました

     php初心者です。よろしくお願いいたします。  MySqlを利用してデータベース構築し,phpでキーワード検索を使用と思いました。  まずはサーバーの環境をvertrigoで行ったところ,しっかりとキーワード検索ができたのですが,XAMPPで構築したところ,「検索条件が指定されていません」という,キーワードが変数に格納されない状況になってしまいました。市販のphpスクリプトを活用して構築したので,何か足りない部分が…と思って調べたのですが分からず,市販のサンプルデータで試してみたところ,同じように変数にキーワードが入らない状況でした。vertrigoとXAMPPでは環境が違うのでしょうか?ちなみに,検索部分のphpは次のとおりです。 search.phpの検索部分 <?php require_once("dbmenu.php"); $PAGESIZE = 9; echo $SerchWord; //<-ここで内容を確認しようとしても何も表示されませんでした。つまり変数には何も入っていないということ!? if (isset($SerchWord) and strlen($SerchWord) > 0) { $searchtype = "kw"; } else { //検索の種類が未指定またはキーワードが空のとき $body = "検索条件が指定されていません! <INPUT type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; print htmlheader("検索結果") . $body . htmlfooter(); exit(); } ~省略~ 入力用のindex.htmの部分 ~省略~ <TD> <FORM name="Kensaku" action="search.php" method="GET">キーワード検索<BR> <INPUT size="51" type="text" name="SerchWord"> <INPUT type="submit" value="検索"> <Input type="button" value="リセット" onClick="this.form.reset()"> </FORM> ~省略~  何かと和歌ららないことだらけですが,どうかどうかご指導ください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 検索においてフィールド名+likeを複数使いたい

    環境:php+mysql ■やりたこと イメージ <form method="get"action="result.php"> <p> 検索ワード:<input type="text" name="key" /> 好きな果物: <select name="cate"> <option VALUE="0"> <option VALUE="りんご">りんご <option VALUE="みかん">みかん </select> <input type="submit" value="送信" />  <input type="reset" value="取り消し" /> </p> </form> と検索フォームをした場合 入力された内容が  検索ワード=愛媛  好きな果物=みかん だとすると みかんのカテゴリに属するレコードで 且つ  みかんのキーワードを含むname またはDescriptionフィールドに該当する 結果数を取得したいです。 補足: $cate(formのプルダウンで VALUE="xx" のxxが入ってきて  これはDB上フィールドに入っている日本語です。) $a(これは検索キーワードが入ってきます。) ■現在書いているphp $sql="select * from item where category=$cate and name like '%".$a."%' or Description like '%".$a."%' "; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); ←75行目 エラー結果 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxx/result.php on line 75 おそらく、73行目の命令文が間違っていると思うのですが、どう対応するのか 検索しても対象になりそうなものがみつからず、、質問させていただきました。 アドバイスのほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでフォームの値をフレームに渡す際、&が使えず

    こんにちは。 PHPで、メタサーチのようなものを作ろうと思っています。 まず、検索窓に入力した値をGoogle検索に送り、 iframe内に表示するようにしました。 しかし、「PHP 入門」など、通常のキーワードであればうまくいくのですが、 「P&G」など、「&」が入ると、勝手にアンド検索になってしまい、うまく機能しません。 値の送り方に問題があるのでしょうか? ご教示お願い致します。 search1.php <?php $keyword=$_GET["keyword"]; $keyword4url=urlencode($keyword); ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body> <center> <form action="search1.php" method="get"> キーワード:<input type="text" name="keyword" size="20" value="<?php echo $keyword;?>" onfocus="this.select()"> を <input type="submit" value="検索する"> </form> <br> <iframe src="http://www.google.co.jp/#q=<?php echo $keyword; ?>" name="frame1" frameborder="1" scrolling="auto" width="977" height="600"> </iframe> </center> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう