What are the potential consequences of using only one data record for a counter script with IP blocking in PHP?

Using only one data record for a counter script with IP blocking in PHP can lead to inaccurate tracking of unique visitors and potential false positives for IP blocking. To solve this issue, you can store each visitor's IP address in a database table along with a timestamp, and then check against this table to determine unique visitors and whether to block an IP address.

// Connect to database
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$conn = new mysqli($servername, $username, $password, $dbname);

// Get visitor's IP address
$ip = $_SERVER['REMOTE_ADDR'];

// Check if IP address exists in database
$sql = "SELECT * FROM visitor_ips WHERE ip_address = '$ip'";
$result = $conn->query($sql);

if ($result->num_rows == 0) {
    // Insert new IP address into database
    $sql_insert = "INSERT INTO visitor_ips (ip_address, visit_time) VALUES ('$ip', NOW())";
    $conn->query($sql_insert);

    // Increment visit counter
    $sql_counter = "UPDATE visit_counter SET counter = counter + 1";
    $conn->query($sql_counter);
}

// Check if IP address should be blocked
$sql_block = "SELECT * FROM blocked_ips WHERE ip_address = '$ip'";
$result_block = $conn->query($sql_block);

if ($result_block->num_rows > 0) {
    // IP address is blocked, redirect or show error message
    header("Location: blocked.php");
    exit();
}

// Close database connection
$conn->close();