• ベストアンサー

POSTされたかどうか確かめる方法で…

POSTされたかどうか確かめるために、今までは if ($_SERVER["REQUEST_METHOD"] == "POST") { } と書いていましたが、別に if (isset($_POST)) { } と書いても同じことでしょうか?? ちなみにPHP5.1.2です。

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

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

#1さんの指摘通り、やってみるのが一番ですよ。 聞くより確実、その場で分かりますので。 if(isset($_POST)) では駄目です。$_POSTにはGETでアクセスしても空の値が入っています。var_dump($_POST)とすると、array(0) { } という値を返します。 issetは値があるかどうかだけを判断するのですが、$_GETや$_POSTは最初から定義されていますので、TRUEを返すのです。 例えば<input type="text" name="a" />の様な変数名を指定した場合には、POSTで送信されて来た場合は$_POST["a"] に入りますのでそれを判断すればPOST値が渡されたかどうかを判断出来ます。即ち、 if(isset($_POST["a"])) というような感じです。 参考まで。

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

その他の回答 (2)

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.2

試してないし、PHPのソースで確かめてもいないですが。 $_SERVER["REQUEST_METHOD"] これはhttpのリクエストの種類。 $_POST これはPOSTで送信されてきたデータを格納する配列。 質問者さんにとって$_POSTが空でないことが、$_SERVER["REQUEST_METHOD"]がPOSTであることと同義である処理なら同じことになるでしょうね。 まぁ実用上目から鱗なことはかけませんが、メソッドはPOSTなんだけど、$_POSTに格納されるデータが空だと同じことにはならないだろうし。 格納されるデータ(条件)は異なるので、用途的に結果的に意味は同じということもありえるし、違うこともありえるかと。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちがうみたいですよ。 やってみるとわかります。 <?PHP if ($_SERVER["REQUEST_METHOD"] == "POST") print "1"; if (isset($_POST)) print "2"; ?>

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

関連するQ&A

  • if (isset($_POST["body"]) && $_POST

    if (isset($_POST["body"]) && $_POST["body"])の中の&& $_POST["body"]って必要ですか? PHPのプログラムを読んでいて、以下のような部分を見つけました if (isset($_POST["body"]) && $_POST["body"]) しかし、どうせisset($_POST["body"])でnullかどうか、値が入っているかどうかを確めているので、&& $_POST["body"]の部分は必要ないように思います。なぜこのような書き方をしているのでしょうか?

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

    xamppにてローカル環境でやっているのですがなぜか type="file"だけPOSTされません。 ie6とfairefox3で試しましたが取得できませんでした。 調べてみたのですが同様の事例が見つからずわからかったのですが これは何が原因なのでしょうか? ---html--- <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="file" name="img" /> <input type="submit" name="send" value="送信する" /> </form> ---php--- if (isset($_POST['send'])) { echo '<pre>'; print_r($_POST); echo '</pre>'; } print_r($_FILES);を試すと正常に値が表示されます。全く意味不明 なのですが何かセキュリティ上の問題などが原因なのでしょうか?

    • 締切済み
    • PHP
  • POSTでもGETでも対応するには

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

    • ベストアンサー
    • PHP
  • リクエストメソッド

    以下はPHPでBMIを計算するプログラムです。リクエストメソッドを取得する意味がよくわかりません。 $request_method = $_SERVER['REQUEST_METHOD']; の部分です。 <?php // 初期化 $height = ''; $weight = ''; $bmi = ''; $err_msg = array(); // エラーメッセージ用の配列 // リクエストメソッドを取得する $request_method = $_SERVER['REQUEST_METHOD']; // 「BMI計算」ボタンをクリックした(POSTされた)場合に処理する if ($request_method === 'POST') { // POSTデータを取得する $height = get_post_data('height'); $weight = get_post_data('weight'); // 身長の値が数値かどうかをチェックする if (is_numeric($height) === FALSE) { $err_msg[] = '身長は数値を入力してください'; } // 体重の値が数値かどうかをチェックする if (is_numeric($weight) === FALSE) { $err_msg[] = '体重は数値を入力してください'; } // エラーがない場合にBMIを算出する if (count($err_msg) === 0) { // BMIを算出する $bmi = calc_bmi($height, $weight); } } /** * BMIを計算する * @param mixed $height 身長(cm) * @param mixed $weight 体重(kg) * @return float 計算したBMIの値を返す */ function calc_bmi($height, $weight) { return round($weight/($height/100*$height/100),1); } /** * POSTデータを取得する * @param str $key 配列キー * @return str POSTの値 */ function get_post_data($key) { $str = ''; if (isset($_POST[$key]) === TRUE) { $str = $_POST[$key]; } return $str; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>BMI計算</title> </head> <body> <h1>BMI計算</h1> <form method="post"> 身長(cm) : <input type="text" name="height" value="<?php print $height ?>"> 体重(kg) : <input type="text" name="weight" value="<?php print $weight ?>"> <input type="submit" value="BMIを計算する"> </form> <?php if (count($err_msg) > 0) { ?> <?php foreach ($err_msg as $value) { ?> <p><?php print $value; ?></p> <?php } ?> <?php } ?> <?php if ($request_method === 'POST' && count($err_msg) === 0) { ?> <p>あなたのBMIは<?php print $bmi; ?>です</p> <?php } ?> </body> </html>

    • 締切済み
    • PHP
  • $_POSTのものを$_GETとして使うのはなぜ?

    http://www.phppro.jp/school/phpschool/vol19/2 こちらの講座にあるサンプルコードで分からないところがあります。 schedule_edit.phpのサンプルでは if (isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2000) { $year = $_POST["year"]; <form action="schedule_edit.php" method="post"> <input type="text" name="year" id="schedule-year" value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" /> <label for="schedule-year" id="label-year">年</label> formで入力されたデータはhtmlspecialchars($year, ENT_QUOTES)の$yearに格納され、 $_POST["year"]としてデータが渡り、 php側で$year = $_POST["year"];のように$_POST["year"]のデータが$yearに格納し直されています。わざわざ格納し直す理由も分からないのですが、一番知りたいところは schedule_list.phpのサンプル内ではPOSTでなくGETで渡されているところです。 if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"]))) $_POST["day"]ではなぜだめなのか分かりません。 この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

    • ベストアンサー
    • PHP
  • 特定の値をPOST送信で他のサーバーに渡したい

    あるPHPページを自動転送ページとし、転送先に特定の値をPOST送信したいと考えています。 同じような質問があり、fsockopenを使ってすると良いようなのですが、どうしても上手くいきません。 現状、POST送信は成功しているのですが、URLが自動転送ページのままで、転送先ページのテキストのみが表示されている状態です。 どうすれば転送先ページに完全に移ってしまえるでしょうか。 ご助力下さい。 <ソース> $url = "http://hoge.co.jp/test.php";  //転送先URL $method = "POST"; $headers = "POST http://hoge.co.jp/test.php HTTP/1.1\r\n";  //転送先URL $postdata = "parm=ok"; $URL = parse_url($url); if(!isset($URL['port'])){$URL['port'] = 80;} //リクエストヘッダ $request = $method." ".$URL['path']." HTTP/1.0\r\n"; $request .= $headers; $request .= "Host: ".$URL['host']."\r\n"; $request .= "User-Agent: PHP/".phpversion()."\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: ".strlen($postdata)."\r\n"; $request .= "\r\n"; $request .= $postdata; //相手サーバへ接続 @$fp = fsockopen($URL['host'], $URL['port']); // 接続失敗 if (!$fp) {die("ただいまメンテナンス中です。\n");} //POSTで送信 fputs($fp, $request); $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); } fclose($fp); //ヘッダ部分とボディ部分を分離 $DATA = split("\r\n\r\n", $response, 2); //出力 echo "<!--\n".$request."\n-->\n"; echo "<!--\n".$DATA[0]."\n-->\n"; echo $DATA[1];

    • ベストアンサー
    • PHP
  • 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の規約に反していないのでしょうか? ご存じの方がいらっしゃしまた、お教えいただければ幸いです。 以上、よろしくお願いいたします。

  • PHPを使ったPOSTについて教えてください。

    <body> <form action="" method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word'])) { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list'])) { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body> これを表示した場合、はじめのページでは Array ( [green] => グリーン [red] => レッド ) と表示されますが、フォームを実行すると、このように表示されます。 Array ( [green] => グリーン [red] => レッド [key] => [List] => ) これを、もしkeyやListの値が何も入力されなかった場合、listで言えば「選択してください」が選択されで実行された場合、[key] =>や [List] =>を表示しないと言うことはできますか? 例えばlistをデフォルトの「選択してください」のまま選択せず、テキスト欄に「テキスト」と入力したら、 Array ( [green] => グリーン [red] => レッド [key] => テキスト) とこのように[List] =>は省きたいです。 そのためにissetを使ったつもりでしたが、うまくいきませんでした。 どうしたら良いでしょうか?教えてください、よろしくお願いします。

    • 締切済み
    • PHP
  • postで送信できないんです

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

    • 締切済み
    • CGI
  • XAMPP における form と $_POST

    xampp-win32-1.8.3 のインストール後何も設定変更していません。 以下のように form から 入力を送信すると文字列によって $_POST が空になります。 <form method="post" action="test_03.php"> <input type="text" name="search_all" style="width:400px"> </form> -- <?php if(isset($_POST['search_all'])){ echo $_POST['search_all']; } 可能な文字列:高浜虚子、正岡子規など 不可能な文字列:夏目漱石(夏、目、石は個別に入れれば表示される。夏目、漱石、漱は空になる) 検索しても、原因が判らず質問させて頂きました。よろしく御願い致します。

    • ベストアンサー
    • PHP
macOS12.1でScanSnap ix1600は使える?
このQ&Aのポイント
  • macOS12.1でのScanSnap ix1600の使用可否について教えてください。
  • ScanSnap ix1600は、macOS12.1で利用できますか?詳細を教えてください。
  • macOS12.1とScanSnap ix1600の互換性について教えてください。
回答を見る