ユーザーからの入力を受け取る

フォームの作成

  • form要素のaction属性に送信先「request.php」を設定する


《request1.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>POSTのデータを取得</title>
</head>
<body>
<form method="POST" action="request2.php">
  <div id="container">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
  </div>
  <input type="submit" value="送信">
</form>
</body>
</html>

《request2.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>POSTのデータを取得</title>
</head>
<body>
こんにちは、
<?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
さん!
</body>
</html>


《実行結果》

ユーザーからの入力を受け取る
  • PHPは「要素の名前(name属性)と値の組み合わせ」として、自動的に変数「$_POST」にセットします
  • 「$_POST」は、PHPが自動的に用意してくれる特別な変数(スーパーグローバル変数)です


「$_POST」から値を取り出すには、input要素のname属性を指定します。

$_POST['name']
ユーザーからの入力値をそのまま表示してはいけない
<?php print ($_POST['name']); ?>

であっても、それなりに動作します。
しかし、以下のようにscript要素を入力することも可能です。


《実行結果》


このようにエラーを返すものと、実行してしまいダイアログボックスを表示してしまうブラウザもあります。
悪意のあるスクリプトを埋め込まれることも考えられます。

htmlspecialchars命令
  • 文字列に含まれるHTMLとして意味のあるもじを文字列に置き換え無害化します



htmlspecialchars ( 文字列, エスケープの種類, 文字コード);

<?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
  • 「ENT_QUOTES」は、シングルクォートも文字列として置き換えなさいという意味です
  • 「ENT_QUOTES」は、文字ではなく「定数」なので、クォートで囲んではいけません


《実行結果》

ポストデータ(POST)とクエリ文字列(GET)

  • P.62参照
  • ポストデータ:封筒の中に収められた手紙の本文
  • クエリ情報:宛名の脇に添えられたメモ書き

まとめ

  • 入力値の送信先は、<form>要素の action属性によって決まります
  • フォームからの入力値には、「$_POST[ '名前' ]」でアクセスできます
  • ユーザーからの入力値を表示するには、htmlspecialchars命令で「<」「>」のような文字を無害な文字列に置き換えなければなりません
  • フォームの送信方法には GETとPOST という形式があります
  • GETで送信されたデータには、変数 $_GET でアクセスできます