PHPで作るチャット(4) HTMLのフォームから送信されたデータを受け取る

2016年10月8日(更新: 2017年7月19日)

前回はPHPでログファイルへテキストを書き込む方法について解説しました。

今回は、初回にHTMLで作った入力フォームから送信されるテキストを受け取り画面に表示する方法についてです。

これを応用することで、フォームから送信されたテキストをファイルに書き込むことができるようになります。

HTMLからPHPにデータを送信するには

PHPにデータを送信するとき、主に使われるHTMLタグは form です。これは初回に用意したものをそのまま使います。

formからデータを送信するためには、送信先のPHPスクリプトを指定すると同時に送信方法も設定します

もう一度以前作ったフォームを見てみましょう。

chat.php

  ...
  <form method="post" action="chat.php">
    <div>
      <b>おなまえ</b>
      <input name="name" type="text" size="20" maxlength="10" value="">
    </div>
    <div>
      <b>コメント</b>
      <input name="message" type="text" size="100" maxlength="50" required>
    </div>
    <button name="submit" type="submit">送信</button>
  </form>
  ...

formタグの属性に methodaction というものがあります。method にはデータの送信方法を、action には送信先のPHPスクリプトを指定します。

上の例では「chat.phpにPOST方式でデータを送信する」ということになります。

もし action を指定しなかった場合は、このフォームタグが書かれているファイル自身にデータを送信します。今回は送信ファイルと受信ファイルが同じなので本当は書かなくてもいいのですが、このように書けば送信側を指定できるということの確認のために書いています。

method に指定できる送信方式には GETPOST の二種類があります。今回の例では POST を使っています。

各方式についての詳しい説明は省略します。もっと詳しく知りたい方は、下記のサイトを御覧ください。

フォームデータを送信する – ウェブデベロッパーガイド | MDN

送信されたデータをPHPで受け取るには

実際にフォームからPOSTメソッドで送信されたデータを受け取る方法です。

例えば、以下のようなテキストフィールドに入力されたテキストを受け取りたいとします。

<input name="AAA" type="text">

PHP側では、inputタグに設定されたname属性の値を使って、どこに書かれたデータが送信されたかを判別します。

echo $_POST['AAA'];

角カッコの中に inputタグのname属性に指定された値を書きます。これで、このname属性を持つタグから送信されたデータをPHPスクリプトで画面に表示できます。

しかし、フォームからデータが送信されていない状態で、$_POST を呼び出そうとするとエラーが発生するので、ちゃんと表示前にこの送信されたかどうか確認する必要があります。そのチェックを行うコードを追加すると、以下のようになります。

if (isset($_POST['AAA'])) {
  echo $_POST['AAA'];
}

関数 isset は、変数がセットされているかどうかをチェックします。以下の部分が、チェックをおこなっている部分です。

isset($_POST['AAA'])

この結果が false だった場合、if文の中の処理を行わないためエラーが発生するのを防げます。具体的な使用例を見ていきましょう。

サンプルコード

送信側のHTMLソースコードと、受け取り側のPHPスクリプトは一つのファイルに書くことができます。

データを受け取る側のPHPスクリプト(chat.php)は以下のようになります。

<!-- chat.php -->
 
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>1行メッセージ</title>
</head>
 
<body>
 
  <h1>1行メッセージ</h1>
 
  <form method="post" action="chat.php">
    <div>
      <b>おなまえ</b>
      <input name="name" type="text" size="20" maxlength="10">
    </div>
    <div>
      <b>コメント</b>
      <input name="message" type="text" size="100" maxlength="50" required>
    </div>
    <button name="submit" type="submit">送信</button>
  </form>
 
  <section>
    <?php
        // 送信された名前とメッセージの表示
        if (isset($_POST['name'])) {
          echo '名前: ' . $_POST['name'] . '<br>';
        }
        if (isset($_POST['message'])) {
          echo 'メッセージ: ' . $_POST['message'];
        }
    ?>
  </section>
 
</body>
</html>

PHPでは、文字列の結合をプラス(+)ではなくドット(.)で行います。

サンプル実行結果

このスクリプトを実行して、フォームの送信ボタンを押すと、入力したデータが画面に表示されます。

POSTをPHPで受け取る例

もし、先ほど説明した isset によるチェックを行わなかった場合、データを送信してない時は以下のようなエラーが出ます。

Undefined Index エラー

以上で、フォームからPOSTで送信されたデータを受け取ることができました。

次回は、フォームから送信したデータをファイルに保存する方法について紹介します。

PHPで作るチャット(4) HTMLのフォームから送信されたデータを受け取る」への1件のフィードバック

  1. ピンバック: PHPで作るチャット(5) フォームから送信されたデータをファイルに書き込む | JoyPlotドキュメント

コメントを残す

メールアドレスが公開されることはありません。