• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:radio選択をクッキーに保存させる方法について)

radio選択をクッキーに保存させる方法について

このQ&Aのポイント
  • PHPでメタサーチを作っています。複数の検索サイト(Yahoo!、Google等)から選択し、検索窓に入力した値を検索サイトに送り、iframe内に表示するようにしました。しかし、ラジオボタンのcookie保存・読み込みがうまくいきません。
  • 値の取得方法に問題があるのでしょうか?ご教示お願い致します。現在、jQuery使用でプログラムを組もうとしていますが、PHPで可能であれば、その方法でもかまいません。
  • 質問文章にあるプログラムは、PHPでメタサーチ機能を作成しているものです。検索窓に入力されたキーワードを複数の検索サイトに送り、iframeを使用して結果を表示しています。ただし、ラジオボタンの選択状態をクッキーに保存・読み込みする方法がうまくいきません。どのように修正すれば良いでしょうか?jQueryを使用しているが、PHPでも良い方法があれば教えてください。

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

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

>setCookie("chk_1","0");に変更しました ちょっと状況がわからないですが・・・ なぜよりによって"0"を選ぶのでしょうか? 0は比較演算子を使うとき空文字やfalseなどと等価でチェックされる場合もあります。 0をつかうなら比較の際にもうすこし厳密にチェックした方がいいでしょう。 そして仮に0をつかったとして、なぜPHP側のチェックで"1"と比較しているのでしょうか? 0をクッキーにいれたなら0と比較してください。 いか、再度サンプル。 <?PHP $checked["chk_1"]=((string) $_COOKIE["chk_1"]==="0")?" checked":""; $checked["chk_2"]=((string) $_COOKIE["chk_2"]==="0")?" checked":""; print_r($_COOKIE); ?> <script> function setCookie(key,val,url){ tmp = key+"="+escape(val)+";"; tmp += "expires=Fri, 31-Dec-2030 23:59:59;"; if(url){ tmp += "domain="+getDomain(url)+";"; tmp += "path="+getDomainPath(url)+";"; } document.cookie = tmp; }; function delCookie(key){ expiredate = new Date(); expiredate.setYear(expiredate.getYear()-1); tmp = key+"=;"; tmp += "expires="+expiredate.toGMTString(); document.cookie = tmp; }; function set_cookie_radio(){ delCookie("chk_1"); delCookie("chk_2"); if(document.getElementById("chk_1").checked) setCookie("chk_1","0"); if(document.getElementById("chk_2").checked) setCookie("chk_2","0"); } </script> <form onsubmit="set_cookie_radio()"> キーワード:<input type="text" name="keyword" size="20">を <input id="chk_1" type="radio" name="RB1" <?PHP echo $checked["chk_1"];?>>Yahoo! <input id="chk_2" type="radio" name="RB1" <?PHP echo $checked["chk_2"];?>>Google で <input type="submit" value="検索する"> </form> サブミットのonclickと関数が競合している可能性は否定できませんが こまかく検証してませんのであしからず

tomorrow_005
質問者

お礼

"0"にはそのような意味があったのですね。 不勉強で勝手に変更してしまい申し訳ありませんでした。 delCookie("chk_1"); でクッキーを削除してしまうと Undefined index: chk_1 とエラーが出たので、 chk_1にも"0"を入れて"0"と"1"で区別するつもりでした。 しかしこの方法ではラジオボタンの選択肢が増えると クッキーの数も増えるのであまりよくありませんね。 エラーは isset($_COOKIE["chk_1"]) で回避するようにしました。 「検索する」で検索できない不具合は私の勘違いでした。 しかしこれでは、選択した項目での検索ができないので、 プログラム構成を再検討致します。 このたびは本当にありがとうございました。 1ヶ月近く悩んでいたことが解決に向かい、本当に嬉しいです。

その他の回答 (1)

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

流れ的には (1)サブミットする際に、javascriptでクッキーを設定する (2)表示の際にチェックしてcheckedをつける で、よいかと。複数個所ある場合はもう少し工夫が必要ですが 考え方は同じです。 <?PHP if($_COOKIE["chk_1"]==1) $checked["chk_1"]=" checked"; if($_COOKIE["chk_2"]==1) $checked["chk_2"]=" checked"; ?> <script> function setCookie(key,val,url){ tmp = key+"="+escape(val)+";"; tmp += "expires=Fri, 31-Dec-2030 23:59:59;"; if(url){ tmp += "domain="+getDomain(url)+";"; tmp += "path="+getDomainPath(url)+";"; } document.cookie = tmp; }; function delCookie(key){ expiredate = new Date(); expiredate.setYear(expiredate.getYear()-1); tmp = key+"=;"; tmp += "expires="+expiredate.toGMTString(); document.cookie = tmp; }; function set_cookie_radio(){ delCookie("chk_1"); delCookie("chk_2"); if(document.getElementById("chk_1").checked) setCookie("chk_1","1"); if(document.getElementById("chk_2").checked) setCookie("chk_2","1"); } </script> <form onsubmit="set_cookie_radio()"> キーワード:<input type="text" name="keyword" size="20">を <input id="chk_1" type="radio" name="RB1" <?PHP echo $checked["chk_1"];?>>Yahoo! <input id="chk_2" type="radio" name="RB1" <?PHP echo $checked["chk_2"];?>>Google で <input type="submit" value="検索する"> </form>

tomorrow_005
質問者

補足

ご回答ありがとうございます。 教えて頂いたサンプルを参考に組み替えました。 (エラー回避のためelse文追加、delCookie("chk_1");をsetCookie("chk_1","0");に変更しました。) しかし、今度は「検索する」ボタンを押したときに検索が出来なくなってしましました。 action="search4-1.php" method="get" と onsubmit="set_cookie_radio()" は両立できないのでしょうか? お忙しいところ申し訳ありませんが、ご回答お願い致します。 以下、書き換えたソースを添付致します。 search4-1 <?php $keyword=$_GET["keyword"]; $keyword4url=urlencode($keyword); ?> <?php if($_COOKIE["chk_1"]==1){ $checked["chk_1"]=" checked"; }else{ $checked["chk_1"]=""; } if($_COOKIE["chk_2"]==1){ $checked["chk_2"]=" checked"; }else{ $checked["chk_2"]=""; } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript"> function P1(w1){parent.frame1.location.href=w1} function setCookie(key,val,url){ tmp = key+"="+escape(val)+";"; tmp += "expires=Fri, 31-Dec-2030 23:59:59;"; if(url){ tmp += "domain="+getDomain(url)+";"; tmp += "path="+getDomainPath(url)+";"; } document.cookie = tmp; }; function delCookie(key){ expiredate = new Date(); expiredate.setYear(expiredate.getYear()-1); tmp = key+"=;"; tmp += "expires="+expiredate.toGMTString(); document.cookie = tmp; }; function set_cookie_radio(){ setCookie("chk_1","0"); setCookie("chk_2","0"); if(document.getElementById("chk_1").checked) setCookie("chk_1","1"); if(document.getElementById("chk_2").checked) setCookie("chk_2","1"); } </script> </head> <body> <center> <form action="search4-1.php" method="get" onsubmit="set_cookie_radio()"> キーワード:<input type="text" name="keyword" size="20" value="<?php echo $keyword;?>" onfocus="this.select()"> を <input id="chk_1" type="radio" name="RB1" onClick="P1('http://search.yahoo.co.jp/search?p=<?php echo $keyword4url; ?>')" <?PHP echo $checked["chk_1"];?>>Yahoo! <input id="chk_2" type="radio" name="RB1" onClick="P1('http://www.google.co.jp/#q=<?php echo $keyword4url; ?>')" <?PHP echo $checked["chk_2"];?>>Google で <input type="submit" value="検索する"> </form> <iframe src="" name="frame1" frameborder="1" scrolling="auto" width="977" height="600"> </iframe> </center> </body> </html>

関連するQ&A

専門家に質問してみよう