PHP 学習メモ 2

概要

 PHP 学習メモ。入力フォームとテーブルデータ書き込み。

内容

  1. 入力フォーム
  2. データ書き込み
  3. メモ

1. 入力フォーム

 ファイル構成は次の通り:

/var/www
  |- html
    |- index.php // エントリーポイント
    |- process_form.php // フォームから送信されたデータを処理
  |- inc
    |- dbinfo.inc // データベース接続情報

 index.php を以下の内容で作成する。

<!DOCTYPE html>
<html>
<body>
<h1>Sample page</h1>

<!-- 入力フォーム -->
<form action="process_form.php" method="POST">
  <table>
    <tr>
      <td>NAME</td>
      <td>ADDRESS</td>
    </tr>
    <tr>
      <td>
        <input type="text" name="NAME" size="30" />
      </td>
      <td>
        <input type="text" name="ADDRESS" size="60" />
      </td>
      <td>
        <input type="submit" value="Add Data" />
      </td>
    </tr>
  </table>
</form>

</body>
</html>

2. データ書き込み

 process_form.php を以下の内容で作成する。

<?php include "../inc/dbinfo.inc"; ?>

<!-- データベース接続 -->
<?php
  $connection = mysqli_connect(
    DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT
  );
?>

<!-- データ追加 -->
<?php
  // 入力フォームの値を取得
  $name = htmlentities($_POST['NAME']);
  $address = htmlentities($_POST['ADDRESS']);

  // データ追加
  if (strlen($name) || strlen($address)) {
    $query = "INSERT INTO PHP_DEMO (NAME, ADDRESS) VALUES ('$name', '$address');";
    mysqli_query($connection, $query);
  }
?>

<!-- データベース切断 -->
<?php
  mysqli_close($connection);

  // エントリーポイントへリダイレクト
  header("Location:index.php");
?>

3. メモ

フォームについて

  • action 属性:フォーム経由で送信された情報を処理するプログラムの URL
  • method 属性:フォームを送信する際にブラウザが使用する HTTP メソッド

POST について

  • $_POST:「スーパーグローバル」と呼ばれる PHP の定義済み変数。 すべてのスコープで使用可能な変数。input タグの name 属性の値をキーとする連想配列

 詳細は以下:

www.php.net

リダイレクトについて

 header('Location:index.php') により http://xxx.xxx.xxx.xxx/index.php にリダイレクトする。これを使用したのは、入力フォームとフォーム送信処理を別ファイルにする(*)ためである。フォーム送信後、入力フォームを表示する画面に戻りたい。そのためフォーム送信処理用のファイルにリダイレクト処理を記述した。
 なぜ(*)のようにしたかというと、同一ファイルに処理を記述した場合、ブラウザのページ更新ボタンを押下時に直前に送信したフォーム内容が再度実行されるということが起こった。これを防ぎたかった。

 header については以下参照:

www.php.net

 上記資料から引用する:

2 番目の特別なヘッダは、"Location:" ヘッダです。このヘッダがブラウザに返されるだけではなく、 ブラウザに REDIRECT (302) ステータスコードを返します (201 や 3xx ステータスコードが既に送信されていない場合にのみ)。

<?php
header('Location: http://www.example.com/'); /* ブラウザをリダイレクトします */

/* リダイレクトする際に、これ以降のコードが実行されないことを確認してください */
exit;
?>