内容
- 入力フォーム
- データ書き込み
- メモ
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
属性:フォーム経由で送信された情報を処理するプログラムの URLmethod
属性:フォームを送信する際にブラウザが使用する HTTP メソッド
POST について
詳細は以下:
リダイレクトについて
header('Location:index.php')
により http://xxx.xxx.xxx.xxx/index.php
にリダイレクトする。これを使用したのは、入力フォームとフォーム送信処理を別ファイルにする(*)ためである。フォーム送信後、入力フォームを表示する画面に戻りたい。そのためフォーム送信処理用のファイルにリダイレクト処理を記述した。
なぜ(*)のようにしたかというと、同一ファイルに処理を記述した場合、ブラウザのページ更新ボタンを押下時に直前に送信したフォーム内容が再度実行されるということが起こった。これを防ぎたかった。
header
については以下参照:
上記資料から引用する:
2 番目の特別なヘッダは、"Location:" ヘッダです。このヘッダがブラウザに返されるだけではなく、 ブラウザに REDIRECT (302) ステータスコードを返します (201 や 3xx ステータスコードが既に送信されていない場合にのみ)。
<?php header('Location: http://www.example.com/'); /* ブラウザをリダイレクトします */ /* リダイレクトする際に、これ以降のコードが実行されないことを確認してください */ exit; ?>