※社内専用

お問い合わせフォームにスパム対策用バリデーションをつける(シード/リミテッド対応)

  • HOME
  • トピックス
  • お問い合わせフォームにスパム対策用バリデーションをつける(シード/リミテッド対応)
スクラッチでできたお問い合わせフォームにスパム対策用のバリデーションを付ける方法。
お問い合わせの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);
    }
}