概要と目標
必須項目やメールアドレスなどの、
入力チェックが出来るようになろう。
ユーザーが送信したデータの空白チェックや、メールアドレスなどの形式のチェックなど、
様々なバリデーション機能を開発できるようになりましょう。
ユーザーが送信したデータの空白チェックや、メールアドレスなどの形式のチェックなど、
様々なバリデーション機能を開発できるようになりましょう。
条件式が true か false によって処理の流れを変える制御構文。
if (条件式) {
// 条件式が true の時の処理
} else {
// 条件式が false の時の処理
}
else { } は省略可能。
2つの値を比較する時は、比較演算子を用いる。
| 演算子 | 説明 |
|---|---|
A > B |
A が B より大きい時 true |
A < B |
A が B より小さい時 true |
A >= B |
A が B 以上の時 true |
A <= B |
A が B 以下の時 true |
A == B |
A が B と等しい時 true |
A != B |
A が B と異なる時 true |
A === B |
A が B とデータ型も含めて等しい時 true |
A !== B |
A が B とデータ型も含めて異なる時 true |
$age = 24;
if ($age >= 20) { // $age の中身が「20」以上なら true
echo '利用可能';
} else {
echo '利用不可';
}
必須項目のチェックは、ユーザーの入力内容が、「空白」と等しいかをif文でチェックすれば良い。
<form action="receive.php" method="post">
<dl>
<dt><label for="your_name">お名前(必須)</label></dt>
<dd><input type="text" id="your_name" name="your_name"></dd>
</dl>
<p><input type="submit" value="入力確認"></p>
</form>
<?php 〜 ?>の間に、受けった値が 空白 と等しいかをチェック
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
echo '<p>お名前を入力して下さい。</p>';
}
メールアドレスやURLを判別するには、filter_var関数を用いると効率がよい。
この関数は第1引数で指定したデータが、第2引数で指定した形式と一致したら、false を返す。
filter_var関数 ・・・ フィルタリングする関数 (PHP5 〜)filter_var(チェックする値, 形式, オプション)
省略可
戻り値: 形式が一致 ・・・ チェックしたデータ
形式が不一致 ・・・ false
引数はPHPマニュアルを参照
| 定数 | 説明 |
|---|---|
FILTER_VALIDATE_EMAIL |
妥当なメールアドレスの形式かを検証 |
FILTER_VALIDATE_URL |
URL形式かを検証 |
<form action="receive.php" method="post">
<dl>
<dt><label for="your_name">お名前(必須)</label></dt>
<dd><input type="text" id="your_name" name="your_name"></dd>
<dt><label for="your_email">メールアドレス</label></dt>
<dd><input type="text" id="your_email" name="your_email"></dd>
</dl>
<p><input type="submit" value="入力確認"></p>
</form>
?>の手前に、受け取った値が、メールアドレスの形式かをチェック
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
echo '<p>お名前を入力して下さい。</p>';
}
// メールアドレスの形式チェック
if ( filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) === false ) {
// $_POST['your_email'] のメールアドレス形式が false(データ型も含む) と等しい時の処理
echo '<p>メールアドレスの形式が正しくありません。</p>';
}
○○ === false」は短くできる。条件式の先頭に "!" を付けると、
条件が false の時、処理を実行する。
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
echo '<p>お名前を入力して下さい。</p>';
}
// メールアドレスの形式チェック
if ( !filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) ) {
// $_POST['your_email'] のメールアドレス形式が false(データ型も含む) と等しい時の処理
echo '<p>メールアドレスの形式が正しくありません。</p>';
}
mb_strlenという関数を使えば、文字数を取得できる。
後は比較演算子で、「○文字以上の時」や「○文字以下の時」などのように、文字数を比較すればよい。
mb_strlen関数 ・・・ 文字数を取得する関数mb_strlen(文字数を調べたい文字列, 文字コード)
省略可
戻り値: 文字数
引数はPHPマニュアルを参照
<form action="receive.php" method="post">
<dl>
<dt><label for="your_name">お名前(必須)</label></dt>
<dd><input type="text" id="your_name" name="your_name"></dd>
<dt><label for="your_email">メールアドレス</label></dt>
<dd><input type="text" id="your_email" name="your_email"></dd>
<dt><label for="your_password">パスワード(4文字以上)</label></dt>
<dd><input type="password" id="your_password" name="your_password"></dd>
</dl>
<p><input type="submit" value="入力確認"></p>
</form>
?>の手前に、受け取った値が「4」文字より小さいかをチェック
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
echo '<p>お名前を入力して下さい。</p>';
}
// メールアドレスの形式チェック
if ( !filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) ) {
// $_POST['your_email'] のメールアドレス形式が false(データ型も含む) と等しい時の処理
echo '<p>メールアドレスの形式が正しくありません。</p>';
}
// 文字数のチェック
if ( mb_strlen( $_POST['your_password'] ) < 4) {
// $_POST['your_password'] の文字数が 4 より小さい時の処理
echo '<p>パスワードは4文字以上で入力して下さい。</p>';
}
一般的なフォームは、送信内容のどれか一つにでもエラーがあれば送信できない。
エラーがあったか、なかったかを判別するには、
エラーがあった項目のエラーメッセージを変数で管理する。
そして、その変数に何かしらのメッセージが入っていれば、「エラーあり」、
空っぽだったら、「エラーなし」と判断することができる。
変数の中身が空かどうかをチェックするには、empty関数を用いる。
この関数は変数の中身が空なら true 中身があれば、 false を返す。
empty関数 ・・・ 変数の中身が空かを判断する関数empty(チェックしたい変数)
戻り値: 空 ・・・ true
空ではない ・・・ false
引数はPHPマニュアルを参照
$error という変数で管理する仕様に変更
// エラーメッセージを管理する変数を用意(空白を代入しておく)
$error = '';
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
$error .= '<p>お名前を入力して下さい。</p>';
}
// メールアドレスの形式チェック
if ( !filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) ) {
// $_POST['your_email'] のメールアドレス形式が false(データ型も含む) と等しい時の処理
$error .= '<p>メールアドレスの形式が正しくありません。</p>';
}
// 文字数のチェック
if ( mb_strlen( $_POST['your_password'] ) < 4) {
// $_POST['your_password'] の文字数が 4 より小さい時の処理
$error .= '<p>パスワードは4文字以上で入力して下さい。</p>';
}
?>の手前に、$error変数が空かをチェック
// エラーメッセージを管理する変数を用意(空白を代入しておく)
$error = '';
// 必須項目チェック
if ( $_POST['your_name'] == '' ) {
// $_POST['your_name'] が 空白 と等しい時の処理
$error .= '<p>お名前を入力して下さい。</p>';
}
// メールアドレスの形式チェック
if ( !filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) ) {
// $_POST['your_email'] のメールアドレス形式が false(データ型も含む) と等しい時の処理
$error .= '<p>メールアドレスの形式が正しくありません。</p>';
}
// 文字数のチェック
if ( mb_strlen( $_POST['your_password'] ) < 4) {
// $_POST['your_password'] の文字数が 4 より小さい時の処理
$error .= '<p>パスワードは4文字以上で入力して下さい。</p>';
}
// エラーの有無を判別
if ( empty( $error ) ) {
// $error が 空 の時の処理 (エラーなし)
echo 'エラーはありません';
} else {
echo $error;
}
empty関数の注意点empty関数は、変数の中身が "0" の場合、true となる。(「空」とみなされる)"0" を空として判断したくない場合は、比較演算子を使った方法を使う。
複数の条件式が全て true 時だけ処理を実行し実行したり、true 時だけ処理を実行したりすることが出来る。
| 演算子 | 説明 |
|---|---|
Aの式 && Bの式 |
A、B どちらの式も true の時に true |
Aの式 and Bの式 |
A、B どちらの式も true の時に true |
Aの式 || Bの式 |
A、B どちらかの式が true の時に true |
Aの式 or Bの式 |
A、B どちらかの式が true の時に true |
$age = 24;
if ($age >= 20 && $age < 30) {
// $age の中身が「20」以上 かつ $age の中身が「30」未満なら true
echo '20代ですね';
}
ログインチェックを行うには、予め登録したメールアドレスやパスワードと、
ログインフォームから入力された、メールアドレスやパスワードが一致しているかを確認する。
<form action="receive.php" method="post">
<dl>
<dt><label for="your_email">メールアドレス</label></dt>
<dd><input type="text" id="your_email" name="your_email"></dd>
<dt><label for="your_password">パスワード</label></dt>
<dd><input type="password" id="your_password" name="your_password"></dd>
</dl>
<p><input type="submit" value="ログイン"></p>
</form>
<?php 〜 ?>の間に、ログインするためのメールアドレスとパスワードを変数に代入
// 今回はログイン用のメールアドレスとパスワードを変数で管理
$email = 'dummy@dummy.com';
$password = 'dummy';
?>の手前に、受け取ったメールアドレス が 変数のメールアドレスと等しい かつ 受け取ったパスワード が 変数のパスワードと等しい かをチェック
// 今回はログイン用のメールアドレスとパスワードを変数で管理
$email = 'dummy@dummy.com';
$password = 'dummy';
// メールアドレスとパスワードどちらも合っているかをチェック
if ( $_POST['your_email'] == $email && $_POST['your_password'] == $password ) {
// $_POST['your_email'] が $email と等しい かつ
// $_POST['your_password'] が $password と等しい時の処理
echo '<p>ログイン成功</p>';
} else {
echo '<p>メールアドレスとパスワードが一致しません</p>';
}
PHPでは、存在しない変数を使おうとすると、Noticeという警告がでる。
Noticeが出ても動作はするが、極力出さないほうがいい。
isset関数 ・・・ 変数が存在するか確認する関数isset(調べたい変数)
引数はPHPマニュアルを参照
input要素のvalue属性に、form 要素の action 属性を 空 にして自分自身にデータを送信する)
<form action="" method="post">
<dl>
<dt><label for="msg">ひとこと</label></dt>
<dd><input type="text" id="msg" name="msg" value="<?php echo htmlspecialchars($_POST['msg'], ENT_QUOTES, 'UTF-8'); ?>"></dd>
</dl>
<p><input type="submit" value="つぶやく"></p>
</form>
$_POSTは存在しないので、$_POSTはform要素内の送信ボタンを押されてから生成される)isset()関数を用いて、$_POSTが存在しているかを確認してから、<form action="" method="post">
<dl>
<dt><label for="msg">ひとこと</label></dt>
<dd><input type="text" id="msg" name="msg" value="<?php if ( isset($_POST['msg']) ) { echo htmlspecialchars($_POST['msg'], ENT_QUOTES, 'UTF-8'); } ?>"></dd>
</dl>
<p><input type="submit" value="つぶやく"></p>
</form>
error_reporting(E_ALL & ~E_NOTICE);
完成例を参考に「tranig」フォルダ内の「receive.php」を完成させて下さい。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>練習問題4</title>
</head>
<body>
<h1>入力確認</h1>
<?php
// エラーメッセージを格納する変数を初期化
$error = '';
// お名前の入力チェック
if ( $_POST['your_name'] == '' ) {
$error .= '<li>お名前を入力して下さい。</li>';
}
// メールアドレスの入力チェック
if ( $_POST['your_email'] == '' ) {
$error .= '<li>メールアドレスを入力して下さい。</li>';
}
if ( $_POST['your_email'] != '' && !filter_var($_POST['your_email'], FILTER_VALIDATE_EMAIL) ) {
$error .= '<li>メールアドレスの形式が正しくありません。</li>';
}
// お問い合わせ内容の入力チェック
if ( $_POST['inquiry'] == '' ) {
$error .= '<li>お問い合わせ内容を入力して下さい。</li>';
}
// エラーの有無を判別
if ( !empty($error) ) {
echo '<ul>' . $error . '</ul>';
} else {
?>
<dl>
<dt>お名前</dt>
<dd>
<?php echo htmlspecialchars($_POST['your_name'], ENT_QUOTES, 'UTF-8'); ?>
</dd>
<dt>メールアドレス</dt>
<dd>
<?php echo htmlspecialchars($_POST['your_email'], ENT_QUOTES, 'UTF-8'); ?>
</dd>
<dt>お問い合わせ内容</dt>
<dd>
<?php echo htmlspecialchars($_POST['inquiry'], ENT_QUOTES, 'UTF-8'); ?>
</dd>
</dl>
<?php
}
?>
<p><a href="./">入力フォームに戻る</a></p>
</body>
</html>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
if文は条件式に応じて処理を分ける制御構文です。
入力チェックなどでよく使うので覚えておきましょう。
isset関数で対策できる。