ここでは以下のファイルを作成して、SWEETS作成機能を開発します。
sweets_admin
app
sweets_admin_create.php
sweets_admin_store.php
実行結果
ビルトインWebサーバを起動する際に /home/ec2-user/environment/sweets_admin/app
フォルダをドキュメントルート(公開フォルダ)に指定します。
$ php -S localhost:8080 -t /home/ec2-user/environment
ブラウザから sweets_admin_list.php
にアクセスすると次のような画面が表示されます。
画面下の CREATE
リンクをクリックすると次の新規作成画面が表示されます。
以下のように新規データを入力します。
STORE
ボタンをクリックすると一覧画面が再表示されます。このとき追加レコードが表示されているのがわかります。
このとき
data
フォルダのsweets.csv
ファイルに新規データが追加されます。
1,Biscuit,200
2,Candy,100
3,Chocolate,300
4,Rusk,400
最終行に改行が付いていることも確認しておいてください。
sweets_admin_create.php
- 完成版
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP Training</title>
</head>
<body>
<h3>Sweets - Create</h3>
<hr>
<form action="sweets_admin_store.php" method="post">
ID: <br>
<input type="number" name="id"/><br>
NAME:<br>
<input type="text" name="name"/><br>
PRICE:
<br><input type="number" name="price"/><br>
<input type="submit" value="STORE"/><br>
</form>
</body>
</html>
sweets_admin_create.php
ファイルはすでに完成しています。あとのsweets_admin_store.php
ファイルを作成します。
sweets_admin_store.php
<?php
require_once("../libs/functions.php");
$id = (string)filter_input(INPUT_POST, "id");
# 入力チェック - IDが未入力の場合
if ($id === "") {
die("Input error. id is required.");
}
# 入力チェック - IDが5桁を超える場合
if (mb_strlen($id) > 5) {
die("Input error. id length > 5.");
}
# 入力チェック - IDが整数でない場合
if (filter_var($id, FILTER_VALIDATE_INT) === false) {
die("Input error. id is not int.");
}
# 入力チェック - IDが`sweets.csv`ファイルの中にすでに存在する場合
if (validate_exist_id($id) === true) {
die("Input error. invalid id.");
}
$name = (string)filter_input(INPUT_POST, "name");
# 入力チェック - NAMEが未入力の場合
if ($name === "") {
die("Input error. name is required.");
}
# 入力チェック - NAMEが20桁を超える場合
if (mb_strlen($name) > 20) {
die("Input error. name length > 20.");
}
$price = (string)filter_input(INPUT_POST, "price");
# 入力チェック - PRICEが未入力の場合
if ($price === "") {
die("Input error. price is required.");
}
# 入力チェック - PRICEが5桁を超える場合
if (mb_strlen($price) > 5) {
die("Input error. price length > 5.");
}
# 入力チェック - PRICEが整数でない場合
if (filter_var($price, FILTER_VALIDATE_INT) === false) {
die("Input error. price is not int.");
}
# TODO get_sweets関数を呼び出す
$sweets = ???;
$new_sweet = ["id" => $id, "name" => $name, "price" => $price];
$sweets[] = $new_sweet;
# TODO save_sweets関数を呼び出す(引数に$sweets) を指定する
???
# TODO sweets_admin_list.php にリダイレクトする
???
プログラムの先頭部分では入力チェックを実装しています。入力データに違反があると
die
関数が呼び出されます。die
関数が呼び出されると引数に指定されたメッセージ(入力エラーメッセージ)を画面に表示してプログラムはそこで終了します。??? の部分(3ヶ所)を実装してください。
参考:入力エラーが存在する場合
ここでは簡易な入力チェック処理を実装しています。ID、NAME、PRICEのいずれかの入力データに違反がある場合は、die
関数によって画面にエラーメッセージが表示されます。
Webシステムの開発ではさまざまな入力データを与えてシステムが正しく動作するかを検証します。ここでは以下のケースを試してみてください。
- 入力チェック - IDが未入力の場合
- 入力チェック - IDが5桁を超える場合
- 入力チェック - IDが整数でない場合
- 入力チェック - IDが
sweets.csv
ファイルの中にすでに存在する場合 - 入力チェック - NAMEが未入力の場合
- 入力チェック - NAMEが20桁を超える場合
- 入力チェック - PRICEが未入力の場合
- 入力チェック - PRICEが5桁を超える場合
- 入力チェック - PRICEが整数でない場合