POSTリクエスト、isset・empty関数を用いた、フォームから受け取ったデータに返り値を表示

フォームで入力したデータを返り値を表示させるまでをまとめてみました。
同じ箇所で詰まっている人のヒントになれれば幸いです。

下の画像のように、入力フォームに名前と年齢を入力し送信ボタンを押すことで「年齢を入力してください」が「XXさんはXX歳です」と表示、または年齢が120歳以上なら「エラー」を表示される処理を実装していきます。
![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1271540/cf2341bc-9a25-9f19-6c4f-5898d2e0d95f.png)

#処理の全容


```index.html
<!DOCTYPE html>
<html lang = “ja”>
<head>
<meta charset = “UTF-8”>
<title>GET・POST練習</title>
</head>
<body>
<h1>データの送信</h1>
<form action="index.php" method="post">
<label>名前</label><input type="text" name="name"><br/>
<label>年齢</label><input type="number" name="age"><br/>
<input type="submit" value="送信">
</form>
</body>
</html>

```
```index.php
if(empty($_POST["age"])){
  if ($_POST["age"] == "") {
    echo "年齢を入力してください";
  };
}elseif(isset($_POST["age"])){
  if ($_POST["age"] < 120) {
    echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です";
  } else {
      echo "エラー";
  }
}
```

#index.html側のコード実装

```
<label>名前</label><input type="text" name="name"><br/>
<label>年齢</label><input type="number" name="age"><br/>
<input type="submit" value="送信">
```
labelタグで<label>○○○</label>とすることで入力フォームの左横にある「名前」「年齢」のフォームの項目を表示できます。
inputタグで<input type="○○○" name="○○○">とすることで入力フォーム（長方形部分）を作成できます。
inputタグ内のtype="○○○" とすることでフォームの各種の型を設定できる。ここでは、名前のフォームで直接手入力で行う"text"、年齢のフォームでは▲▼で数字を合わせる"number"としています。
nameで"name"、"age"としているのは、後のphp側のコード実装でPOSTメソッドを使う際に合わせて用います。

#index.php側のコード実装
```index.php
if(empty($_POST["age"])){
  if ($_POST["age"] == "") {
    echo "年齢を入力してください";
  };
}elseif(isset($_POST["age"])){
  if ($_POST["age"] < 120) {
    echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です";
  } else {
      echo "エラー";
  }
}
```
大枠のif文のelseifの前後の処理それぞれ分けて解説していきます。
###if文のelseifの前の処理
```index.php
if(empty($_POST["age"])){
  if ($_POST["age"] == "") {
    echo "年齢を入力してください";
  };
```
この部分は、冒頭の画像にあった「年齢を入力してください」と表示させる際の処理です。
ここで用いるempty関数とは、引数に与えた変数や配列の中身が空であるか否かを確認する関数です。
この関数は、変数の値が0あるいは空、NULLである場合はTRUEを、それ以外である場合はFALSEを結果として返します。言い換えれば、存在しない場合や値がない場合にTRUEと返すものがempty関数です。

次にPOSTメソッドですが、これは入力した内容をサーバー（データベース等、ここの場合index.php）へ送るために用います。
具体的な処理として、メッセージボディ(入力フォーム)に入力した情報を記述してリクエストしサーバーへ送ります。このメッセージボディは、URLと異なり情報は残らないので比較的セキュリティの高く、ユーザー名やパスワードなど第3者に知られたくない情報はPOSTメソッドを用いて行います。
類似のものとしてGETメソッドというものがありますが、こちらはリクエストラインにクエリストリングとして、入力した情報を付与してサーバーへ送り、POSTメソッドよりも比較的セキュリティの低い情報を扱う際に用います。

これらを踏まえて処理を解説していくと、「年齢」のフォームに入力したものの引数「age」をPOSTメソッドでindex.php側へ送り込み、empty関数とif文を組み合わせて「もしageに存在しない場合・値がない場合はTRUE」という条件式を作ります。TRUEだった場合に何を返すかについては、インデントを下げたところにさらにif文で「もしageに値がない場合は『年齢を入力してください』を出力」という条件式を作ります。これにより、「年齢を入力してください」と表示させています。

###if文のelseif以降の処理
次にelseif以降の処理の解説です。

```index.php
}elseif(isset($_POST["age"])){
  if ($_POST["age"] < 120) {
    echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です";
  } else {
      echo "エラー";
  }
}
```
先ほどの「もしageに存在しない場合・値がない場合はTRUE」という条件式において、何かしら値がありempty関数がFalseと判断した場合、こちらの処理が実行されます。
ここで用いるisset関数とは、変数が宣言されている（値がある）こと・nullとは異なることを確認する関数です。

これらを踏まえて同様に処理を解説していくと、
isset関数を用いて「もしageに何かしら値がある場合・nullとは異なる場合はTRUE」とし、
TRUEだった場合の返すものとして一段下げたインデントにIf文を作り「もしageが１２０以下なら、引数nameを用いて『nameさんはage歳です』、そうでない場合は『エラー』と返す処理ができます。

こうして、入力フォームに名前と年齢を入力し送信ボタンを押すことで「年齢を入力してください」が「XXさんはXX歳です」と表示、または年齢が120歳以上なら「エラー」を表示される処理完成します。

以上になります。
説明不備・間違った解釈などありましたら、ご教授のほどお願いします。


#参考
empty関数について：https://blog.codecamp.jp/programming-php-empty-howtouse
POSTメソッドについて：https://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC3%E7%AB%A0-post%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
isset関数について：https://www.php.net/manual/ja/function.isset.php