【お題】引っかけ問題(締め切り10月27日(日)23時)

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

A 回答 (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では日本語を使用する為には日本語化パッチが必要でした)
そういった意味でも使用しないほうが無難と言った所です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/12/20 15:34

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のサーバにアップロードされた時など
文字化けして変数とみなされない場合がある為です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ちょっと初心者質問で恐縮ですが、これを見るとPOSTで渡された場合もhoge1=hoge&hoge2=hoge
という書式で渡されているようなのですが、$_SERVER["QUERY_STRING"]は、変数部分だけそのように受け取れるものなのでしょうか。

それと、これは別な質問として立てるべきだったと後悔しておりますが、日本語変数名に関してですが、すべてeucで記述するようにしてもダメでしょうか。

お礼日時:2003/12/18 10:09

配列で渡せばよいかと。


<select name="test[]" multiple>
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/12/17 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報