投稿日:2022/04/12
更新日:2022/06/13
スクラッチでできたお問い合わせフォームにスパム対策用のバリデーションを付ける方法。
お問い合わせのtextareaの入力項目内にひらがなもしくはカタカナが含まれていなかった場合、スパムとみなし、送信処理を強制終了させる。
今回は確認画面を介さないスパム対応ということで、確認画面→送信完了画面に設置する。
お問い合わせのtextareaの入力項目内にひらがなもしくはカタカナが含まれていなかった場合、スパムとみなし、送信処理を強制終了させる。
今回は確認画面を介さないスパム対応ということで、確認画面→送信完了画面に設置する。
src/submit_controller.phpを編集する
25行目付近「if ($_SESSION[‘progress’] != ‘done’)」内に下記コード追記
//スパム対策、送信内容にひらがな・カタカナバリデーションをかける
if ($field->type == 'textarea') {
if(!empty($val) && !preg_match('/[ぁ-ん]+|[ァ-ヴー]+/u', $val)) {
exit("スパムメールを受信したため、プログラムを終了します。");
}
}
最終的に下記になるようにコードを追加してください。
if ($_SESSION['progress'] != 'done') {
for ($i = 0; $i < count($config->fields); $i++) {
$field = $config->fields[$i];
$key = 'field_' . $i;
if (!isset($_SESSION[$key])) {
continue;
}
$val = $_SESSION[$key];
if ($field->type == 'email') {
$confirm_mailto = $val;
}
//スパム対策、送信内容にひらがなバリデーションをかける
if ($field->type == 'textarea') {
if(!empty($val) && !preg_match('/[ぁ-ん]+|[ァ-ヴー]+/u', $val)) {
exit("スパムメールを受信したため、プログラムを終了します。");
}
}
if (is_array($val)) { // 複数回答を文字列データに直す
$val_tmp = '';
foreach($val as $val2){
$val_tmp .= $val2.' ';
}
$val = $val_tmp;
}
$sys_senddata[$field->label] = unhtmlentities($val);
}
}