• ベストアンサー

同じ変数名で値がいくつかある場合の処理

http://oshiete1.goo.ne.jp/kotaeru.php3?q=731400の質問の続きなのですが、変数名もいくつデータが送られてくるかもわからない状態なのですが、同じ変数名で違う値が送られてくる場合(例えばチェックボックスとかセレクトボックスのマルチプル)はどのようにすればすべての値を拾えるでしょうか。 また、変数名をすべて日本語にしたいのですが、何か問題などあるでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • sisya
  • ベストアンサー率39% (97/245)
回答No.3

すいません、postは標準入力からでしたね。 前回の例の下の部分を変更してみてください。 postとgetは受け渡し方法が違うだけで 中の書式は同じですのでこれで問題無いはずです。 $foo = $_SERVER["QUERY_STRING"];     ↓ if($_ENV{'REQUEST_METHOD'} == "post"){ $foo = array_shift(file("php://input")); }else{ $foo = $_SERVER["QUERY_STRING"]; } 日本語に関してですが、 PHPは入力、内部処理、外部ですべて別の文字コードを 設定できるようになっているのですが、 自分で設定したサーバでPHPを使用なさるならともかく レンタルサーバなどを使用した場合、 内部処理に使用する言語設定は業者が設定してしまっているので、 こちらから変更する手段がなくはないですが、 普通に使った場合やはり文字化けしてしまいます。 後、元々1バイト文字(半角英数)をベースに使っている方が開発された言語ですので、 日本語などの2バイト文字を使用する事はあまり想定されていません。 (実際古いバージョンのPHPでは日本語を使用する為には日本語化パッチが必要でした) そういった意味でも使用しないほうが無難と言った所です。

umioyo
質問者

お礼

ご丁寧にありがとうございました。 php://inputがよくわからなかったですが、だいたいわかりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sisya
  • ベストアンサー率39% (97/245)
回答No.2

GuruGuru22さんの仰るとおり、 <select name="test[]" multiple> など、「name="test[]"」と言った感じで []をname属性に付加した場合、 $_POST['test'][0],$_POST['test'][1]と 言った感じで内容を参照できますが、 name要素を変更できない場合は $_SERVER["QUERY_STRING"] にフォームから送られた値が入っているので 自力で分解すれば取得する事もできるはずです。 例: $foo = $_SERVER["QUERY_STRING"]; $array = explode("&", $foo); foreach($array as $ber){ list($key, $value) = explode("=", $ber); #すでに存在する属性の値の時 if(isset($post[$key])){ array_push($post[$key], $value); } #初めて取得する属性の時 else{ $post[$key] = array($value); } } testと言う属性で3つ値を取得したい場合、 このルーチンで値を取得しますと $post['test']に配列で値が格納されます (一つしかない値も配列になってしまうのが難点ですね…) あと、日本語の変数名は止めておいたほうが無難です。 日本語の表現方法はJisやEUCなど複数あり、 PHPの内部で使用されているのがどちらなのかは サーバによって違い、JISで書いた日本語変数名が EUCのサーバにアップロードされた時など 文字化けして変数とみなされない場合がある為です。

umioyo
質問者

お礼

ご回答ありがとうございます。 ちょっと初心者質問で恐縮ですが、これを見るとPOSTで渡された場合もhoge1=hoge&hoge2=hoge という書式で渡されているようなのですが、$_SERVER["QUERY_STRING"]は、変数部分だけそのように受け取れるものなのでしょうか。 それと、これは別な質問として立てるべきだったと後悔しておりますが、日本語変数名に関してですが、すべてeucで記述するようにしてもダメでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

配列で渡せばよいかと。 <select name="test[]" multiple>

umioyo
質問者

お礼

ご回答ありがとうございます。 しかし、変数名をこちらで決めることができないのです・・・ やはりこれは無理でしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変数の代入

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=620304 の続きなのです。変数の取得の仕方はわかったのですが、 require '../lib/cgi-lib.pl'; &ReadParse(*in); $year=$in{'year'}; $month=$in{'month'}; のように値を .html からひらってきているような場合、値が0(なし)になってしまうと思うのですが、こういった場合、どういう方法をとるのでしょうか?

    • ベストアンサー
    • CGI
  • Accessでチェックボックスのチェックをすべてはずす方法

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=522365 で質問しました。 チェックの値をなくす方法として、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=164713 を発見し、以下のようにしてみました。 テーブル名:「T_マスタ」「T_アプリ」 T_マスタ(F_マスタ)からT_アプリ(F_アプリ)を開き、チェックボックス(フィールド名:check)にチェックをした後に、 ボタンを押したらチェックボックスをすべて「No」にしたいのです。 ボタンのコードは Dim strSQL As String strSQL = "update T_アプリ set check = false" DoCmd.RunSQL strSQL DoCmd.Close としました。 ですが、エラーが出てしまいます。 (レコードのロックとかって出ました。) どうすればきちんと値が「NO」になるのでしょうか?

  • 皆さんの名(迷)回答を自慢しちゃってください

    振りかえってみると、私もこのサイトで今まで170回以上の回答をしていました。 さて、おなじみの皆さんも過去の自慢の名(迷)回答を披露してください。 いわば同じ回答でポイントをゲットのWチャンスです!(笑) 私の自慢の迷回答は、まずhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1799142 そして http://oshiete1.goo.ne.jp/kotaeru.php3?q=1696885 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1783673 この質問の複数回答は全てネタと思われたようでポイントは無しでしたが、良い回答が出来たと思ってます。 さらにマジメなものとしてはhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1756616 です。この質問には本当に親身になって回答したつもりだったので、良回答とされた時にはすごく嬉しかったです。

  • エクセルVBAで、テキストボックスに値を入れる(3)

    質問がバラバラになってしまってすみません! エクセルVBAで、テキストボックスに値を入れる(1)の 回答13で、 データシートの何行目~何行目までを印刷させる方法(Sheet7にボタン) をさせるには、どうしたら良いでしょうか?宜しくお願いします。 前回のURL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173       http://oshiete1.goo.ne.jp/kotaeru.php3?qid=85389

  • CD TEXTを入力したい。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=402333 で質問の続きです。 CDの作成を押しても「CD TEXT」のところのチェックができません。 どうしてでしょうか? 何を直せばきちんと動作しますか?

  • 限界です。。。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1744653 このつづきなんですか、誰か相談にのってください! おねがいします!

  • 振込み先の口座名を複数持ちたいのですが、どういう形がよいですか?

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=488092 理由は、仕事先やサークルなど、1つの口座名ですと、 わかりにくいのです。

  • 彼女がレイプされたかも知れないんです。そんな場合、今、僕に出来ることは・・・。(その8)

    このままずっと、ご両親または彼女本人の連絡を待つしか手はないんでしょうか?メールは行方不明中も、万が一、ネットカフェなどで、またはラチされた男の家で、見る可能性もあると思って、彼女宛てにメッセージを何通も打ったし、帰ってきてからも、こっちの経過状況、どこを探したかとか、どういう話しをご両親としたかとか、いつの時点で警察に捜索願いを出したかとかを克明にメールしました。あと、安心させる意味で今後のことも・・・。  もし、最悪のケースで精神障害にまで至っていたら、ラチされた連中に変な薬でも飲まされていたら・・など、もう、ノイローゼ気味なんです。彼女の言い文も信じたいんですが、積もった雪道歩ってて、全身にすり傷、きり傷つきますか?  みなさんはどう考えますか?これだけの情報からレイプサされてしまってる可能性はどれくらいありますか?そして、軟派な皆さん、ラチ経験がある人でも結構ですが深夜に女子高生が1人でジャージ姿で、路上をトコトコ歩っていたら、どうしますか?彼女が強く断っても、誘いますか?きっと彼女はすぐには乗らないだろうけど、かなり歩って疲労がピークに来ていたら、乗る可能性もあるし、それに、もし、乗ってしまったら、疲労感からすぐ寝てしまうだろうし、隣か、後ろで寝てしまったら後はどこへ連れていかれてもわからないだろうし、起きたら、彼の家、ラブホって事だっておおいに考えられるでしょう?  このままでは辛くって、辛くって何も手につかないんです。どんな意見でもいいです。欲しいんです。宜しくお願いします。 (長くなってホントにごめんなさい、でもマジ辛いんです。寝れないし、呼吸が出来ない・・・・) 関連URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=199156 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199162 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199163 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199165 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199169 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199170 http://oshiete1.goo.ne.jp/kotaeru.php3?q=199172

  • 名前も電話番号も聞き出した。次はどうすれば・・・?

    下記の関連質問の続きです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=612642 http://oshiete1.goo.ne.jp/kotaeru.php3?q=652311 http://oshiete1.goo.ne.jp/kotaeru.php3?q=654331 その後、名前と電話番号を教えてもらいました。 これって、多少は脈がありますよね? (ちょっと前までは、可能性があるかないかすらわからなかったので、一歩前進?だと思っているのですが) 日曜日空いているか訊いたところ、「他のバイトが入っているので・・・」とのことでした。 (でも、拒絶という感じではありませんでした) 今後どうしたら、彼女との仲を進展させられるでしょうか? アドバイスを頂けると嬉しいです。

  • 強制的にセレクトボックスの値を変える

    http://www.okweb.ne.jp/kotaeru.php3?q=256766の関連質問にもなるのですが、 confirmで確認の際、「OK」でなく「キャンセル」の場合に、選択されたセレクトボックスの値を強制的に変更してsubmitさせる方法はないでしょうか。 confirm「学生ですか」→「OK」そのままsubumit confirm「学生ですか」→「キャンセル」セレクトボックスの値を「学生以外」などの値にしてsubmit