PHP

PHP フォームから値を取得する$_POSTの使い方

2016/02/12

フォームから値を取得する「$_POST」の使い方を見ていきます。

前回「フォームやURLのパラメータから値を取得する$_GETの使い方」の記事で$_GETの使い方を取り上げましたが、$_GETと同じように$_POSTもフォームから送られてきた値を取得することができます。

HTMLのフォーム

下記のようなシンプルなフォームを作成します。

<form action="" method="post">
  <p><input type="text" name="first_name"></p>
  <p><input type="text" name="last_name"></p>
  <p><input type="submit" value="送信"></p>
</form>

「action」は前回と同じく空にして送信先を自分自身にしています。
「method」を post とすることで送信先のファイルで $_POST を使用して値を受け取ることができます。

$_POSTで受け取る

送信された値は$_POSTに配列で入ってきます。キーはinputのname属性の値です。
下記のように表示することができます。(下記のままではセキュリティ的に良くないので気をつけて下さい)

<?php
echo $_POST["first_name"];
echo $_POST["last_name"];
?>

$_GETとは違い、URLにパラメータが表示されません。URLに表示されると良くない値、例えばパスワード等を送信する場合は必ずPOSTで送信しましょう。

簡単な例

動作確認用に、下記のような例を作成してみました。

<?php
$firstName = "";
$lastName = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
  if (!empty($_POST["first_name"]) && !empty($_POST["last_name"])) {
    $fullName = $_POST["last_name"] . " " . $_POST["first_name"];
  } else {
    $lastName = $_POST["last_name"];
    $firstName = $_POST["first_name"];
    $err = "入力されていない項目があります。";
  }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>サンプル</title>
  <meta name="robots" content="noindex, nofollow" />
</head>
<body>
  <?php if (!isset($fullName)) : ?>
    <form action="" method="post">
      <p>姓: <input type="text" name="last_name" value="<?php echo htmlspecialchars($lastName, ENT_QUOTES, "UTF-8"); ?>"></p>
      <p>名: <input type="text" name="first_name" value="<?php echo htmlspecialchars($firstName, ENT_QUOTES, "UTF-8"); ?>"></p>
      <p style="color:red;"><?php echo $err; ?></p>
      <p><input type="submit" value="送信"></p>
    </form>
  <?php else : ?>
    <p>
      あなたの名前は <?php echo htmlspecialchars($fullName, ENT_QUOTES, "UTF-8"); ?> ですね。<br>
    </p>
    <p><a href="">戻る</a></p>
  <?php endif; ?>
</body>
</html>

» 実行結果

内容を簡単に説明すると…

$firstName = "";
$lastName = "";

↑ 変数を初期化します。

if ($_SERVER["REQUEST_METHOD"] === "POST") {

↑ フォームがPOSTで送信された場合に{}内の処理を行うというif文です。

if ($_SERVER["REQUEST_METHOD"] === "POST") {
  if (!empty($_POST["first_name"]) && !empty($_POST["last_name"])) {
    $fullName = $_POST["last_name"] . " " . $_POST["first_name"];
  } else {
    $lastName = $_POST["last_name"];
    $firstName = $_POST["first_name"];
    $err = "入力されていない項目があります。";
  }
}

↑ 姓と名が両方入力されている場合は変数fullNameに値を入れます。両方または片方が空の場合はそれぞれの変数に値を入れ(入力された値をinputに表示するため)、エラーメッセージを作成します。

  <?php if (!isset($fullName)) : ?>
    <form action="" method="post">
      <p>姓: <input type="text" name="last_name" value="<?php echo htmlspecialchars($lastName, ENT_QUOTES, "UTF-8"); ?>"></p>
      <p>名: <input type="text" name="first_name" value="<?php echo htmlspecialchars($firstName, ENT_QUOTES, "UTF-8"); ?>"></p>
      <p style="color:red;"><?php echo $err; ?></p>
      <p><input type="submit" value="送信"></p>
    </form>
  <?php else : ?>

↑ 変数fullNameが存在しない(POSTが送信されていない または エラーが存在する)場合、フォームを表示し、エラーが存在する場合はメッセージを表示します。
htmlspecialchars という関数が初めて出てきました。これはフォームから送信された値をそのまま表示してしまうとセキュリティ的にまずいため、値をエスケープする関数です。htmlspecialcharsについては「エスケープ処理のためのhtmlspecialcharsの使い方」の記事をご覧ください。

  <?php else : ?>
    <p>
      あなたの名前は <?php echo htmlspecialchars($fullName, ENT_QUOTES, "UTF-8"); ?> ですね。
    </p>
    <p><a href="">戻る</a></p>
  <?php endif; ?>

↑ 変数fullNameが存在する場合、名前と戻るボタンを表示します。

最後に・・・

$_GET と $_POST の使い分けについては今後別の記事で取り上げたいと思います。

-PHP