<?php
# POST送信されたかどうか判別 POST送信じゃなければリダイレクト
if(strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST') {
# リダイレクト
header('Location: /home');
exit;
}
# 値の取得
$name = $_POST['name']; # 名前
$age = $_POST['age']; # 年齢
$pass = $_POST['pass']; # パスワード
# エラー用変数
$errors = array();
# 改行やスペースなどを全て削除してデータが残るかどうか
if(!strtr($name, array(" " => "", " " => "", "\r" => "", "\n" => "", "\r\n" => ""))) {
$errors[] = '名前が未入力です。';
}
# 年齢チェック \d{1,2}の正規表現で、数字1桁~2桁かどうかをチェック
if(!preg_match("/^\d{1,2}$/", $age)) {
$errors[] = '年齢は半角数字のみで0~99の値を入力してください。';
}
if(!preg_match("/^\w{8,16}$/", $pass)) {
$errors[] = 'パスワードは半角英数字・アンダースコアのみで8~16文字で入力してください。';
}
# エラーがなければDB登録
if(!count($errors)) {
// データベース登録処理をここに記述
}
以上、ざっくりかきましたが
エラーチェックなどはメソッドで処理を分割してあげると
とても見やすいコードになると思います。
注意点として、上記のコードのままだと
値が全てある状態じゃないとNoticeエラーを吐きます。
isset() もしくは empty() で値のチェックをすることを推奨します。
また、パスワードの正規表現内にある8,16の箇所も
設定ファイルかなにかにstaticな変数として定義し
それをpreg_match内においてあげれば、パスワード文字数に変更があった場合でも
簡単に切り替えられます。
preg_match("/^\w{". Config::PW_LENGTH_BEGIN .",". Config::PW_LENGTH_END ."}$/", $pass);
最近業務でJavaを使用するのですが
Javaのアノテーションで制御するバリデーションはとても便利ですね。
開発者としては書くコードがだいぶ減るので、助かります。
そっちのほうも時間があれば記事にしたいと思います。
以上です( ・∀・)
