フォームで特定のドメインに一致するメールアドレスを弾く
クライアントの要望で、特定のドメインに一致するメールアドレスを除外してほしいと言われたので対応をメモ。
form
<form action="confirm.php" method="post">
<div class="form-item">
<div class="form-item-ttl">メールアドレス<span>必須</span><?php if ($_SESSION["err_email"]) { ?><span class="error"><?php print $_SESSION['err_email']; ?></span><?php } ?></div>
<div class="form-item-content">
<input type="email" id="email" name="email" value="<?php print $_SESSION['email']; ?>">
</div>
</div>
<button type="submit">確認</button>
</form>
confirm.php
<?php
//エスケープ
function strEsc($str)
{
return htmlspecialchars($str, ENT_QUOTES, "UTF-8");
}
function form_check()
{
$error = array();
//排除ドメイン
$freemails = array(
'gmail.com',
'yahoo.co.jp',
'outlook.jp',
);
$_SESSION["email"] = strEsc($_POST["email"]);
if (!$_SESSION["email"]) {
$_SESSION["err_email"] = "メールアドレスを入力をしてください";
$error["email"] = 1;
} else {
if (!filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) {
$_SESSION["err_email"] = "適切なメールアドレスを記載ください";
$error["email"] = 1;
} else {
//ドメインのチェック
foreach ($freemails as $freemail) {
if (preg_match("/@" . preg_quote($freemail) . "$/ui", $_SESSION['email'])) {
$_SESSION["err_email"] = 'こちらのドメインはお使いになれません';
$error["email"] = 1;
break;
} else {
$_SESSION["err_email"] = "";
$error["email"] = "";
}
}
}
}
if (array_filter($error)) {
//エラーがあったら戻す
print "<meta http-equiv='refresh' content='0;URL=/'>";
exit;
}
}
form_check();
?>
<div class="form-item">
<div class="form-item-ttl">メールアドレス</div>
<div class="form-item-content">
<?php print $_SESSION['email']; ?>
</div>
</div>