web制作 | 夜間飛行 備忘録

web制作講座で教わったあれこれを書き留めていきます

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;

を追加