PHP $_POST

PHPの$_POSTは、HTTP POSTメソッドを介して受信した変数の配列を含んでいます。

HTTP POSTメソッドを使用して変数を送信する主な方法は2つあります:

  • HTMLフォーム
  • JavaScript HTTPリクエスト

HTMLフォームでの$_POST

HTMLフォームは、フォームのmethod属性が「POST」に設定されている場合にHTTP POSTメソッドを使用して情報を送信します。

これを示すために、まず簡単なHTMLフォームを作成します:


<html>
<body>

<form method="POST" action="demo_request.php">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

</body>
</html>

ユーザーが送信ボタンをクリックすると、フォームデータは<form>タグのaction属性で指定されたPHPファイルに送信されます。

アクションファイルでは、$_POST変数を使用して入力フィールドの値を収集できます。


$name = $_POST['fname'];
echo $name;

以下の例では、HTMLフォームとPHPコードを同じPHPファイルに配置しています。

セキュリティのためにいくつかの追加行も追加しています。


<html>
<body>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = htmlspecialchars($_POST['fname']);
  if (empty($name)) {
    echo "Name is empty";
  } else {
    echo $name;
  }
}
?>

</body>
</html>

JavaScript HTTPリクエストでの$_POST

JavaScriptでHTTPリクエストを送信する際には、HTTPメソッドがPOSTであることを指定できます。

これを示すために、HTTPリクエストを含むJavaScript関数を作成します:


function myfunction() {
  const xhttp = new XMLHttpRequest();
  xhttp.open("POST", "demo_phpfile.php");
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.send("fname=Mary");
}

上記のコードは以下の操作を行います:

  • HTTPリクエストの初期化
  • HTTPメソッドをPOSTに設定
  • 有効なリクエストヘッダーを設定
  • リクエストが完了したときに実行する関数を作成
  • 変数fnameをMaryに設定してHTTPリクエストを送信

リクエストが完了したときに実行される関数を見てみましょう:


xhttp.onload = function() {
  document.getElementById("demo").innerHTML = this.responseText;
}

これは、id=”demo”のHTML要素に操作からの応答を書き込もうとします。

このような要素を持つHTMLページと、関数を実行するボタンも追加します。

JavaScriptも追加すれば、ページは次のようになります:

HTTPリクエストからデータを送信して受け取る方法:


<html>
<script>
function myfunction() {
  const xhttp = new XMLHttpRequest();
  xhttp.open("POST", "demo_ajax.php");
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.send("fname=Mary");
}
</script>
<body>

<button onclick="myfunction()">Click me!</button>

<h1 id="demo"></h1>

</body>
</html>

このHTTPリクエストを受信するPHPファイル(demo_ajax.php)では、単純に$_POST変数を使用してfname変数を取得し、それを応答として書き込みます。


$name = $_POST['fname'];
echo $name;