73日目 | web制作
本日は…
■バリデート機能をつけてやる
①入力項目が空だった場合
<?php if(empty($name)){ $error_name = 'お名前を入力してください'; } ?> 中略 <td><?php echo htmlspecialchars($name)//以下略の後ろに echo htmlspecialchars($error_name)//以下略をして出力する ?> </td>
中身が空っぽのときはいいが、このままでは中身が入っているときエラーが帰ってくる。
⇒頭に
<?php $error_name = ''; ?>
を付けておいてやる。必ず空でもなにか値を入れる=初期化している。
※empty関数はisset関数と違って、空文字も空として判断できる。
②中の文字が長すぎた場合
<?php if(mb_strlen($name,'utf-8')>30){ $error_name = 'お名前が長すぎます'; } ?>
書く場所は$error_なんとかを書いた下にまとめて。
③Eメールアドレスに全角が使われていないか
<?php if(mb_strlen($email,'utf-8')!=strlen($email));{ $error_email='全角文字が使われています'; } ?>
半角英数は1バイトなので、全角があると重さが両辺で異なるので、falseが返る。
④@があるかないか
<?php if(strpos($email,'@')===false){ $error_email = '@がありません'; } ?>
strposは本来、指定した文字がどこにいるか調べる関数。
どこにもその文字がいないと、falseを返してくるので、それを利用して、falseのとき@がありませんと返すようにしている。
●ミスがあった場合、送信を出来ないようにする。
check.phpに
$succssess_flog = true;
をまず作ってやる。
各ifを通った場合、$success_flog = false;を出してくるので
1つもifを通らない場合以外は、必ずfalseになる。
⇒これによって、trueの場合のみechoで送信ボタンを呼び出してやる。
send.phpに
<?php session_start(); if(!isset($_SESSION['success_flg']) || !$_SESSION['success_flg']){ header('Location:./index.php'); exit; } ?>
としてやると、send.phpを通っていないとsuccess_flgがいない、もしくはSESSIONにsuccess.flgが定義されていないので、index.phpに飛ばされる。
■htmlspecialcharsが長くてどーしょーもないので自動化しよう
<?php function h($str){ return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } ?> //中略 <td><?php echo h($name); echo h($error_name); ?></td>
ユーザー定義関数を作って、$str(任意の名前の$変数)をhtmlspecialcharsをつけた状態で帰ってくるように(=return)してやる。
これで、h($なんとか)にしてやるだけで、html~~がついた状態になる。
⇒各ページの先頭にfunctionを入れて、各項目を書き換えてやればOK。
●エラーがあったときにエラーメッセージを入力画面に戻してやりたい
⇒どうするか??
check.phpに
$_SESSION['error_name'] = $error_name; $_SESSION['error_email'] = $error_email; $_SESSION['error_message'] = $error_message;
を追加