本文へスキップ
BecomeCoder

PHPコース · 第5章 文字列・実践・Webへ · レッスン19

WebとPHP ― フォームを受け取る

ローカル実施

導入

いよいよ PHP 本来の舞台、Web です。ここは仕組みの理解が目的なので読み物として進めます(下の実行環境は前レッスンまでの練習に使ってください)。

説明

PHP は元々「HTMLの中に処理を埋め込む」言語です。<?php ... ?> の外はそのままHTMLとして出力され、中だけが PHP として実行されます。

<!DOCTYPE html>
<html>
<body>
  <h1>ようこそ</h1>
  <p>今日は <?php echo date("Y年n月j日"); ?> です。</p>

  <ul>
  <?php foreach (["朝会", "レビュー", "リリース"] as $task): ?>
    <li><?php echo $task; ?></li>
  <?php endforeach; ?>
  </ul>
</body>
</html>

date("Y年n月j日") は現在の日付を返す関数です。foreach (...) : ... endforeach; は、HTMLに埋め込むとき読みやすい書き方(波かっこの代わりにコロンと endforeach)です。ページを開くたびに、サーバー上で PHP がこのHTMLをその場で組み立てて返します。

フォームから送られた値は、$_GET$_POST という連想配列で受け取ります。ユーザーが入力した「名前」を受け取る例です。

<?php
// 送信ボタンが押されたとき(POSTで届いたとき)だけ処理する
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $name = htmlspecialchars(trim($_POST["name"] ?? ""));
    echo "<p>{$name} さん、こんにちは!</p>";
}
?>
<form method="post">
  <input type="text" name="name">
  <button type="submit">送信</button>
</form>

$_POST["name"] で、name="name" の入力欄の値を受け取ります。?? "" は「値が無ければ空文字」の意味(null合体演算子)です。htmlspecialchars() は、入力された文字をそのまま表示しても悪用されないように無害化する関数で、ユーザー入力を画面に出すときは必ず通すのがWebの鉄則です。

このレッスンのコードは Web サーバー(php -S localhost:8000 や Apache など)の上で動かすものです。手元で試したい人は、PHP をインストールして php -S localhost:8000 を実行し、ブラウザでアクセスしてみましょう。

演習

(読み物のため自動判定はありません)手元に PHP を入れられる人は、上のフォームの例をファイル index.php に保存し、php -S localhost:8000 で起動して、名前を送信すると挨拶が返ることを試してみましょう。htmlspecialchars を外すとどうなるかも観察すると、その必要性が実感できます。