What are common methods to prevent spam attacks through contact forms in PHP?

Spam attacks through contact forms in PHP can be prevented by implementing CAPTCHA verification, using honeypot fields, and setting form submission limits. These methods help to distinguish between human users and bots, reducing the likelihood of spam submissions.

<?php
// Check if the CAPTCHA code entered is correct
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if ($_POST["captcha"] != $_SESSION["captcha"]) {
        echo "CAPTCHA verification failed.";
        exit;
    }
}

// Add a honeypot field to the form
if (!empty($_POST["honeypot"])) {
    echo "Spam submission detected.";
    exit;
}

// Limit form submissions from the same IP address
$ip = $_SERVER['REMOTE_ADDR'];
$submission_limit = 3;
if (isset($_SESSION['submissions'][$ip]) && $_SESSION['submissions'][$ip] >= $submission_limit) {
    echo "Submission limit exceeded.";
    exit;
} else {
    $_SESSION['submissions'][$ip] = isset($_SESSION['submissions'][$ip]) ? $_SESSION['submissions'][$ip] + 1 : 1;
}

// Process the form submission
// Your form processing code here

// Clear form submission count after successful submission
unset($_SESSION['submissions'][$ip]);
?>