Как настроить ограничения по времени для кликов?

У меня есть скрипт опросов на PHP, в котором есть две ссылки "Да" и "Нет". Я хочу сделать ограничение по времени, чтобы предотвратить спам. Я попробовал использовать JavaScript, но столкнулся с проблемой, что при нажатии на ссылку страница обновляется и скрипт сбивается. Я задумал использовать cookies для сохранения данных, но не знаю, как это сделать. Остается еще один вариант - использовать базу данных для ограничения. Можете подсказать, как это сделать? Я могу показать вам код, но сейчас я нахожусь на телефоне. Можете дать мне пример?
  • 14 сентября 2023 г. 14:17
Ответы на вопрос 2
Да, конечно, я могу дать вам пример кода, который поможет вам реализовать ограничение по времени для кликов в PHP используя базу данных. Вот простой пример:

1. Создайте таблицу в базе данных (например, MySQL), которая будет хранить время последнего клика пользователя:

```sql
CREATE TABLE clicks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    last_click_time TIMESTAMP
);
```

2. В вашем PHP-скрипте опросов, перед выводом ссылок "Да" и "Нет", добавьте следующий код для проверки времени последнего клика пользователя:

```php
// Подключение к базе данных
$servername = "localhost";
$username = "пользователь";
$password = "пароль";
$dbname = "имя_базы_данных";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Ошибка подключения к базе данных: " . $conn->connect_error);
}

// Получение ID пользователя (может быть получено из cookies или сессии)
$user_id = 1;

// Проверка времени последнего клика пользователя
$sql = "SELECT last_click_time FROM clicks WHERE user_id = $user_id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();

    // Время последнего клика пользователя
    $last_click_time = $row['last_click_time'];

    // Время, которое должно пройти с последнего клика (в секундах)
    $time_limit = 60; // Например, 60 секунд

    // Если время, прошедшее с последнего клика, менее $time_limit, показать сообщение об ошибке
    if (time() - strtotime($last_click_time) < $time_limit) {
        die("Пожалуйста, подождите некоторое время перед повторным нажатием.");
    }
}

// Обновление времени последнего клика пользователя или создание новой записи
$sql = "REPLACE INTO clicks (user_id, last_click_time) VALUES ('$user_id', NOW())";
$conn->query($sql);

// Закрытие соединения с базой данных
$conn->close();
```

В этом примере мы проверяем время последнего клика пользователя. Если время, прошедшее с последнего клика, менее заданного лимита (в данном случае 60 секунд), то показываем сообщение об ошибке. В противном случае, обновляем время последнего клика или создаем новую запись в таблице "clicks".

Надеюсь, этот пример поможет вам реализовать ограничение по времени для кликов в вашем опросе. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, пожалуйста, дайте мне знать!
Можно сделать с использованием PHP или JS.

Вариант на PHP:

Cookies PHP

Вариант на JS:
let clicks = 0; // Получаем количество кликов
localStorage.setItem("clicks", clicks);
// Теперь получим их
const clicks = localStorage.getItem("clicks");
console.log(clicks);
Session JS
Похожие вопросы