書き込み処理の作成(1) |
|
前回作成したフォームに書き込み機能をつけていきましょう。 |
まず、各フォームにデータがなければ投稿できないようにしたいので、各エラー処理を実装していきます。 |
|
bbs.php |
<?php
//投稿ボタンが押されたら
if (isset($_POST["register"])){
//エラーメッセージを格納する配列を作成
$error_message = array();
//各データがセットされていたら各変数にPOSTのデータを格納
if ($_POST["name"] !==
""){
$name = htmlspecialchars($_POST["name"],ENT_QUOTES);
//各データがなかったらエラーメッセージを配列に格納
}else{
$error_message[] = "名前を入力してください。<br>";
}
if ($_POST["title"] !== ""){
$title = htmlspecialchars($_POST["title"],ENT_QUOTES);
}else{
$error_message[] = "タイトルを入力してください。<br>";
}
if ($_POST["body"] !== ""){
$body = htmlspecialchars($_POST["body"],ENT_QUOTES);
}else{
$error_message[] = "本文を入力してください。<br>";
}
//エラーがない時
if (!count($error_message)){
//確認ページへ
header ("Location:conf.php");
exit;
}
}
//エラーがある時
if (count($error_message)){
foreach ($error_message as $message){
print ($message);
}
}
?>
<html>
<title>掲示板</title>
<body>
書き込みフォーム<br><br>
<form action="bbs.php" method="post">
名前<br><input type="text"
name="name"><br>
タイトル<br><input type="text"
name="title"><br>
本文(50字以内)<br>
<input type="text" name="body"
size="50" maxlength="50">
<input type="submit"name="register"
value="投稿">
</body>
</html>
|
保存してプレビューしてみましょう。エラーがあるときの挙動をみるために何も書かないで投稿ボタンを押して |
みるとエラーメッセージが表示されますね。
|
|
・エラー処理
|
今回はエラーメッセージをまとめて配列に格納して展開し、表示しています。 |
プログラムにはエラー処理は必須と言っても良いでしょう。フォームに何もないのに投稿できたら困りますから |
ね。今回は、投稿ボタンが押されたら
= $_POST["register"]に値がセットされたら、各エラーメッセージを格納 |
する空の配列を作成します。 |
|
次に各フォームに値がセットされているかチェックします。 if($_POST["name"] !==
"") で何を行っているか |
と言うと、$_POST["name"] が "" ("" は空文字列という意味)でないか、を判断しています。 |
!==
は比較演算子で厳密に等しくないという意味です。 |
ここでisset関数を何故使わないのかというと、フォームを空で送信すると空文字列 "" が入ってしまうので |
値がセットされていることになってしまうからです。 |
|
・htmlspecialchars関数 |
htmlspecialchars関数は引数の文字列をHTMLエンティティに変換します。 |
書き込み内容にHTMLを有効にしておくと悪意のあるユーザーがフォームに悪質なスクリプトを書き込む恐れが |
あります。セキュリティ上、「<」や「"」などの記号はエスケープしましょう。ENT_QUOTES は「"」も「'」もエスケ |
ープする設定という意味です。 |
|
・header関数 |
エラーがなければ書き込み内容確認画面へ遷移させる処理をheader関数で実装します。
|
header関数は以下のように記述します。
|
header(Location:ジャンプ先URL)
|
header関数は生のHTTPヘッダーを送信します。HTTPヘッダーとはブラウザとサーバー間でやり取りされる |
直接見えないデータです。Locationヘッダを使用すると設定したジャンプ先へ遷移(リダイレクト)します。 |
注意してほしいのはheader関数の前に何か出力する処理があると機能しないことです。必ず処理の最初に |
記述しましょう。また、Locationヘッダの後にはのちの処理が実行されないようにexitを記述しておきましょう。 |
※exit…プログラムを抜け出します。 |
|
・count関数 |
次にエラーメッセージの表示です。count関数を使用して、配列に含まれる要素(エラーメッセージ)の数を |
数えます。エラーメッセージがなかったら書き込み処理へ移行します。count関数は以下のように使います。 |
count(配列やオブジェクト)
|
エラーメッセージがない時 = !(count($error_message)
書き込み処理へ、 |
エラーメッセージが存在する時は、foreach文で配列を変数$messageとして展開し、表示します。 |
|
|
これで書き込み時のエラー処理は完成です。次に確認ページを作成しましょう。
|
|
|
|