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;