• ベストアンサー

POSTでもGETでも対応するには

Perlでプログラムを制作していたのですが、 PHPに乗り換えようと勉強中です。 ひとつのプログラムが、POSTでもGETでも 対応できるようにする場合、 Perlであれば $ENV{'REQUEST_METHOD'}の値を調べることによって 対応可能ですが、 調べてみたところ、PHPの場合はPerlの $ENV{'REQUEST_METHOD'}に相当する変数が無いように見受けられます。 どちらでも対応可能にする場合には、 どのようにコーディングすればよいのでしょうか。

  • PHP
  • 回答数3
  • ありがとう数4

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

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

$_REQUESTですね。 phpinfo()関数で見てみると、変数一覧など 得られますので便利ですよ。 //test.php <?PHP phpinfo(); ?> としておいてtest.php?a=1&b=2とかでアクセスする とわかります。

Koji001
質問者

お礼

ありがとうございます。 今テストしてみましたが、 通常、$_POST["a"]で処理しているところを $_REQUIEST["a"]に書き換えればGETでもPOSTでも 使用できることを確認しました。 ありがとうございました。

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がると申します。 厳密には、$_REQUESTですとCookieの値なども取れてしまうので。 ご自身で「GETとPOSTの双方をチェックして値を取得する」ような簡単な関数を作成されてみてはいかがでしょうか?

Koji001
質問者

お礼

一度作成すればずっと使い回しが効きそうなので、 作成してみたいと思います。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

http://jp2.php.net/manual/ja/reserved.variables.php $_ENV を使うか $_REQUEST を使う(どっちでも良い場合、そもそも調べない)と良いんじゃないでしょうか

Koji001
質問者

お礼

さっそくのご返答ありがとうございます。 私の調査不足ですね。 こんな便利な変数があるなんて知りませんでした。 ありがとうございます。

関連するQ&A

  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI
  • GETはできるがPOSTができない、、、

    PHPの勉強を始めたのですが、困ってるので教えてください。 HTMLのformタグでmethod="GET"では、PHPへデータが渡るのですが、"POST"ではデータが渡りません。 このような場合、どのような原因が考えられるのでしょうか? 環境は OS: WindowsXP(SP2 PHP: 4.3.10 Apache: 2.0.52 すべてSJISで統一しています。 よろしくお願いします。

    • 締切済み
    • PHP
  • 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の両方を渡したいと思ってます。 どうかご教授宜しくお願い致します。

    • ベストアンサー
    • PHP
  • postで送信できないんです

    oracle plsqlで開発しています。 htmlからpostでプロシジャーに値をわたしていますが、 パラメータが渡っていないようです。 エラーページでREQUEST METHOD=GETと表示されてしまいます。 getで送るとページが表示されるのですが・・・ formタグのmethod=postにすればREQUEST METHODには自動的にPOSTがはいると 思っていたのですが、どこかで設定しなければいけないのでしょうか。 とても困っています。 どなたか教えてください。

    • 締切済み
    • CGI
  • $_POST,$_GETの値が空...

    はじめまして。まだまだPHP初心者なのですが.. PHP Ver 4.3.2 にて、$_POST 、 $_GET の値がどうしても 受け取れないのですが、何か設定がおかし いのでしょうか... ちなみに、register_global は OFF です。 GET は URL http://***.com/xxx.php?ID=aaa echo $_GET["ID"]; print_r ( $_GET ); POSTは、通常通り form の method を POSTに設定して 受け取っていますが、どちらにしても結果は、何も表示されません。 どなたか解決方法をご教授下さい。 また、既出でしたら申し訳ございませんがご指摘下さい。

    • ベストアンサー
    • PHP
  • post と get

    postとgetの両方でデータ送信が行われる可能性がある場合(あるときはpost、あるときはget)に簡単に効率よくデータを変数に入れてやる方法ってありますか? 最初は$_REQUEST を使っていたのですが、これではクッキー情報も入ってしまったため、これはやめました。そこで今は下のような方法を考えています。 if(postならば){ while(list ($key, $val) = each($_POST)) { $INPUT[$key] = $val; } } else {//getなら while(list ($key, $val) = each($_GET)) { $INPUT[$key] = $val; } } ただ、検索の仕方が下手なのか、受信した送信形式がPOSTかGETなのかということを知る方法がわかりません。 どなたかアドバイスを下さい。

    • ベストアンサー
    • PHP
  • POSTで送れない

    PerlでCGIを製作しています。 一覧画面-個別画面-編集画面 というページ構成ですが、一覧画面から個別画面、個別画面から編集画面へはURLの後に?をつけて要はGETでデータの受け渡しをしています。 編集画面に入った後、ボタン(submit)を押すとPOSTでデータを受け渡し、内部処理をしたいのですが、編集画面内では受け渡したいデータを<form method="post"></form>で囲んでいるにもかかわらず、どうやらGETで送られているようで、受け渡し先のところで$ENV{'REQUEST_METHOD'}を表示するようにして確認してみてもGETと表示されてしまいます。 きちんとPOSTと指定しているのになぜGETで送られてしまうのでしょうか。 (受け渡し前の画面のURLは、編集画面にくるための都合上http://○○.com?aaa=bbbのようになっています) また、どうすればPOSTで送ってくれるのでしょうか。 ヒントでも何でも結構ですので是非御指南ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • getとpostのメソッドがごっちゃになったようなフォームの結果は、条件によって変わる?変わらない

    getとpostのメソッドがごっちゃになったようなフォームの結果は、条件によって変わる?変わらない 以下のように、getとpostのメソッドがごっちゃになったようなフォームについて質問させてください。 ==================================================================================================== <?php //なお、PHP Version 5.1.6、CentOS4.4です。 /** 以下のように、 form tagで、actionにはクエリーストリングをつけて、でもmethodとしてpostを指定した場合、 */ ?> <form action="/phpinf.php?foo=bar&fuga=hoge" method="post" name="f"> <input type="hidden" name="text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost" value="ddddd" /> <input type="submit" name="submit" value="送信" /> </form> ==================================================================================================== の結果は、 $_GETの中身(全部)は $_GET["foo"] bar $_GET["fuga"] hoge //----------------------------------------------------------- $_POSTの中身(全部)は $_POST["text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost"] ddddd $_POST["submit"] 送信 //----------------------------------------------------------- $_REQUESTの中身(全部) は、 $_REQUEST["foo"] bar $_REQUEST["fuga"] hoge $_REQUEST["text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost"] ddddd $_REQUEST["submit"] 送信 $_REQUEST["セッションidの文字列"] fdhfdshdsfhhkfdsjfdsjf //----------------------------------------------------------- また、$_SERVER から抜粋すると、 $_SERVER["REQUEST_METHOD"] POST $_SERVER["QUERY_STRING"] foo=bar&fuga=hoge $_SERVER["REQUEST_URI"] /phpinf.php?foo=bar&fuga=hoge //----------------------------------------------------------- となりました。 こういった結果は、 OS,Webサーバ,phpやperlやrubyやasp...などの言語の種類(or 素のhtml)、 また、user agent にも関係なく、 同様の結果となるのでしょうか? さらに質問ですが、こういったformの記述は、RFCやW3Cの規約に反していないのでしょうか? ご存じの方がいらっしゃしまた、お教えいただければ幸いです。 以上、よろしくお願いいたします。

  • GETからPOSTに変更

    GETで別のphpに移動させていた処理をPOSTで移動させようとしましたが移してくれません。 移動先にはユーザに見せたくないhiddenの値を送ります。 GETの場合だとこの文字が一瞬見えてしまっていました。 <form>タグを使うとGETよりはましですがパケットモニタでクライアントからサーバに送られている値がバレます。値の暗号化はしません。 fsockopenだとサーバ内でhiddenの値が渡されるのでユーザに値はバレずに次のphpに値を渡せましたが移動ができませんでした。 POSTで移動もするにはどうするとよいのでしょうか?

    • 締切済み
    • PHP
  • v5.58でGETパラメータの取得

    サーバの移転に伴いアクセスログの移転をしているのですが、特定の機能だけ動きません。 どうもGETでパラメータが取得できていないようです。 GETパラメータの取得には *decode = &parseInput($ENV{'REQUEST_METHOD'}); $act = ($decode{'・・・'}); としています。 しかいこの$actに何も取れていないようなんです。 $actの値によってifで条件分岐しているのですが、elseになってしまい 正常に動きません。 他の機能では正常に動いているのですが、原因が分からず困っています。 どなたかご教授頂けないでしょうか? PHPはある程度わかるのですが、Perlは全然わかりませんので、大苦戦中です。 どうかご教授をお願いします。

    • ベストアンサー
    • Perl