• ベストアンサー

POSTとGETについて

POSTとGETについて2点質問が御座います。 PHPは最近手を付け始めましたので、初心者です。 (1)PHPでPOSTとGET両方使うことは出来ますでしょう   か? 内容:PHPファイルからCGIに値を引きつきたいのですが、テキストエリアのフォーム(POST)とCGIのリンク先に"hogehoge.php?id=xxxx"とGETのxxxxとPOSTのテキストエリアに記載した内容を2つ引き継ぎたいのですが、GETの方の値がCGIで反映されていません。 POSTとGETの両方引きつぎたいときはどのようにすれば良いでしょうか? (2)また(1)とは、別の話ですが、GETだけで2つの情報を引き継ぐことは可能でしょうか? "hogehoge.php?id=xxxx,?id2=yyyy"のようなイメージでxxxxとyyyyの両方を渡したいと思ってます。 どうかご教授宜しくお願い致します。

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

  • ベストアンサー
回答No.3

rad6さんはじめまして、papillon68と申します。 まず、CGIについてですが、PHPをCGIとされているのでしょうか。 とれともPerlなど他の言語をCGIとされているのでしょうか。 (1) PHPではPOSTで送信されたデータもGETで送信されたデータもともに取得可能です。(同時も) それぞれ、 POST: $_POST['xxxx'] GET: $_GET['xxxx'] で取得できます。 Perlはあまり分からないのですが、 POST送信かGET送信かの判断を if($ENV{'REQUEST_METHOD'} eq "POST") で判断することがあると思います。 そこでどちらか一方しか受け取れないようなソースを書いてしまっているのではないでしょうか。 ------------------------------------------------- <?php if(isset($_POST['submit'])) { print "\$_GET['xxx']:&nbsp;".(isset($_GET['xxx'])?$_GET['xxx']:'セットされていません')."<br>"; print "\$_POST['xxx']:&nbsp;".(isset($_POST['xxx'])?$_POST['xxx']:'セットされていません')."<br>"; print "\$_REQUEST['xxx']:&nbsp;".(isset($_REQUEST['xxx'])?$_REQUEST['xxx']:'セットされていません')."<br>"; } ?> <form action="<?=$_SERVER['PHP_SELF']?>?xxx=GET_VALUE&" method="post"> <input type="text" name="xxx" value="">&nbsp;&nbsp; <input type="submit" name="submit" value=" 送 信 "> </form> ------------------------------------------------- サンプルコードでは一つ一つのリクエストデータに対して POSTやGETが存在するかを判断しています。 このようにすることでどちらのデータも取得可能となります。 if($_SERVER['REQUEST_METHOD'] == "POST") { $xxx = $_POST['xxx']; $yyy = $_POST['yyy']; } else { $xxx = $_GET['xxx']; $yyy = $_GET['yyy']; } のような受取り方をしているのであれば、 GETでxxxを送信し、POSTでyyyを送信した場合には両方の取得はできませんので、 取得方法を考える必要があります。 (URL?xxx=GET_VALUE& でyyyをPOSTで送信する場合) (2) URLのパラメータとしてGET送信する際に複数の変数を指定したい場合は URL?id=xxxx&id2=yyyy& のように「&」で区切ります。 ただし、GET送信の場合ですと送信できるデータ量に制限がありますので、 大きな要領のデータを送信する場合はPOSTを使った方が言いように思います。 GETの場合にはサーバによって違うように聞きましたが256バイトまでだったと思います。 (うる覚えですので調べた方がいいです^^;)

rad6
質問者

お礼

>まず、CGIについてですが、PHPをCGIとされているの >でしょうか。 >とれともPerlなど他の言語をCGIとされているのでし >ょうか。 すみませんでした。 CGIはPERLになります。 >if($ENV{'REQUEST_METHOD'} eq "POST") >で判断することがあると思います。 >そこでどちらか一方しか受け取れないようなソースを>書いてしまっているのではないでしょうか。 ご指摘通り、どちらか一方しか受け取れないソースになっていました。仕様を変更し、正常に動作するようになりました。 こんなに親切なご回答ありがとうございました。 本当に助かりました。

その他の回答 (3)

回答No.4

CGIがPerlでしたら添付したサイトが参考になるかもしれません。 また、GETでのバイト制限についてですが、これは GET送信するバイト数だけではなく、URL全てです。 URL?x=X_VALUE&y=Y_VALUE& の場合 「X_VALUE」と「Y_VALUE」のバイト数だけではなく 「URL?x=X_VALUE&y=Y_VALUE&」全てで256バイトまでです。

参考URL:
http://www.futomi.com/lecture/form/index.html
rad6
質問者

お礼

ありがとう御座います。 お気に入りにこのサイトを登録しました。 m(__)m

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

すいませんPHPの設定(arg_separator.input)によっては";"は使えない場合もあるし他の記号も使えたりしますね。 デフォルトの"&"でつなげば大丈夫と思います。 hogehoge.php?id=xxxx&id2=yyyy&id3=zzz・・・

rad6
質問者

お礼

ご親切に訂正までして下さりありがとうございました。 非常に助かりました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

(1)普通にできますよ POSTは$_POST['hoge']でGETは$_GET['hogehoge']で取得できます。またはPOST,GET関係なければ$_REQUEST['hoge']でもできます。 (2)"&" か ";"でつなぎます hogehoge.php?id=xxxx&id2=yyyy hogehoge.php?id=xxxx;id2=yyyy

rad6
質問者

お礼

非常に助かりました。 本当にありがとう御座いました。