• ベストアンサー

特殊な連想配列について

どなたか教えてください。 $_REQUESTを使用した部分に警告が出て正しく表示されません。 参考にしたサンプルソースの説明書にはPHP5.2.6と書いてあったのですが、 私の環境は5.3ですのでそれが起因しているような気がするのですが、ググっても 全くわかりません。 if($_REQUEST(["xxx"]) != "" ) のような記述部分が全て Notice: Undefined index: xxx in C:\xampp\htdocs\abcde\test.php on line 49 のようになります。 よろしくお願いいたします。

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

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

>isset($_REQUEST["address1"]) == "奈良県" issetの使い方が私の例示とちがいますね・・・ 今回のケースであればこんな感じでよいかと <?PHP error_reporting(E_ALL ^ E_NOTICE); $selected["address1"][$_REQUEST["address1"]]=" selected"; ?> <form> <p> エリア:<br> <select name="address1"> <option value="">全て</option> <option value="大阪府"<?php print $selected["address1"]["大阪府"]; ?>>大阪府</option> <option value="京都府"<?php print $selected["address1"]["京府都"]; ?>>京府都</option> <option value="兵庫県"<?php print $selected["address1"]["兵庫県"]; ?>>兵庫県</option> <option value="奈良県"<?php print $selected["address1"]["奈良県"]; ?>>奈良県</option> </select> <input type="submit" name="submit" value="絞込検索"> </p> </form>

taizomaru
質問者

お礼

ありがとうございます! issetの件は申し訳ありません、試行錯誤している状態の消し忘れでした・・・。 頂いたソースでやってみましたところ、京都府で検索した場合だけプルダウンが「全て」に変わってしまいます。 すごくすっきりとした構文にしていただき本当に感謝しております。 学習を深めさせていただきます。

その他の回答 (3)

回答No.4

PHPにおいて文字列比較に「==」を使ってはいけません。 「===」もしくはstrcmp()関数を使いましょう。

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

>京都府で検索した場合だけプルダウンが「全て」に ああ・・・ごめんなさい、質問者さんのコードを流用したからですね 「京都府」と書くべきところを「京府都」と書いてある箇所があります。 すべて「京都府」に統一すればいいでしょう

taizomaru
質問者

お礼

こちらこそスペルミスで申し訳ございませんでした・・・。 とても助かりました、がんばって勉強しだいと思います。

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

まずは、質問記述が間違えています。 >if($_REQUEST(["xxx"]) != "" ) if($_REQUEST["xxx"] != "" ) ですね・・・上記のものだとそもそもが文法エラー そのうえで、今回の件はerror_reportingの問題だと思います。 たぶん今の環境でphp.iniがタイトな設定になっているのかと。 対処方法としては・・・ <?PHP error_reporting(E_ALL ^ E_NOTICE); if($_REQUEST["xxx"] != "" ) print $_REQUEST["xxx"]; ?> と、E_NOTICEを除いてやれば設定していないキーの値をとってもエラーはでません。 ちゃんとやるなら <?PHP error_reporting(-1); if(isset($_REQUEST["xxx"]) and $_REQUEST["xxx"] != "" ) print $_REQUEST["xxx"]; ?> のように、存在確認をしてから比較をすることになります

参考URL:
http://www.php.net/manual/ja/function.error-reporting.php
taizomaru
質問者

補足

質問の際にコピペを誤りました・・・、ご指摘ありがとうございます。 教えて頂いた方法でうまくいきました! ただ1点、下記のようなデータべースからセレクト項目で出力させる物を作っているのですが、検索実行をすると最終的な表示が奈良県になってしまいます・・・。 選んだ項目をそのまま残したいのですが、合わせて教えて頂けないでしょうか。 よろしくお願いいたします。 <form name="search_form" action="search2.php" method="POST"> <p> エリア:<br> <select name="address1"> <option value="">全て</option> <option <?php error_reporting(E_ALL ^ E_NOTICE); if($_REQUEST["address1"] == "大阪府" ){ print( "selected" ); } ?> value="大阪府">大阪府</option> <option <?php error_reporting(E_ALL ^ E_NOTICE); if($_REQUEST["address1"] == "京府都" ){ print( "selected" ); } ?> value="京都府">京府都</option> <option <?php error_reporting(E_ALL ^ E_NOTICE); if($_REQUEST["address1"] == "兵庫県" ){ print( "selected" ); } ?> value="兵庫県">兵庫県</option> <option <?php error_reporting(E_ALL ^ E_NOTICE); if(isset($_REQUEST["address1"]) == "奈良県" ){ print( "selected" ); } ?> value="奈良県">奈良県</option> </select> </p> <input type="submit" name="submit" value="絞込検索"> </p> </form>