ECサイト作成の過程で商品の画像を登録する必要があり、その際のバリデーションに時間がかかってしまったので、備忘録として残します。
作りたいもの
ユーザー登録と同様に商品の情報をする際にバリデーションを行います。具体的には以下のようになります。
- product_register.phpで商品名、商品画像、紹介文、価格を入力する。
- 入力情報にバリデーションをかけて、エラーメッセージがなければproduct_confirm.phpに遷移し、そうでなければエラーメッセージを表示してリダイレクトする。
- バリデーションは、全て入力必須、画像は画像ファイルであること、価格は半角数字とした
画像ファイルのバリデーション
以下のような画像ファイルかどうかを判定する関数をvalidation.php
に作成しました。(前回の記事で作成したファイルに追加しました。)
<?
function isImage($fileName,$tmpImage,$filetype){
if (is_uploaded_file($tmpImage)) {
if(explode("/",$filetype)[0] != "image"){
//画像判定
$message= "画像ファイルをアップロードしてください。";
return $message;
}
if (move_uploaded_file ($tmpImage, "images/" .date("Ymd-His") . $fileName)) {
chmod("images/" . date("Ymd-His") . $fileName, 0644);
echo $fileName."がアップロードされました。";
} else {
$message = "ファイルをアップロードできません。";
return $message;
}
} else {
$message = "ファイルが選択されていません。";
return $message;
}
?>
引数には$filename
にはファイル名,$tmpImage
には一時保存ファイル名,filetype
にはファイルのMIMEタイプを渡します。
この関数を使う際には以下のように記述します。
<?
require_once 'validation.php';
$val = new Validation();
$result = $val->validate($input_control,$_POST);
$isImage= $val->isImage($_FILES['productImage']['name'],$_FILES['productImage']['tmp_name'],$_FILES['productImage']['type']);
if(!is_null($is_image)){
$result['productImage']=$isImage;
}
if(!(empty($result))){
//エラーがある場合の処理
foreach($result as $error){
echo $error;
echo '<br>';
}
}else{
//エラーがない場合の処理
$_SESSION = $_POST;
header('Location:product_confirm.php');//確認ページに遷移
exit;
}
isImage関数では適切なファイルであればreturnがされないのでNULLが返ってきます。なので返り値がNULLではないときにエラーメッセージを代入します。
※ $result['productImage']=isImage();
とすればよさそうに見えますが、そうするとバリデーション通過時に$result['productImage']
にNULLが入ってしまい、$result自体は空ではなくなってしまうのでエラーメッセージが入ってしまうので注意しましょう。