@RIBO46

Как предотвратить многократное выполнение функции php?

Как предотвратить многократное выполнение функции php? В самом php не через js. Долго искал в интернете и ничего не нашел. На моем сайте вызывается функция php через js но пользователь может автокликером успеть несколько раз активировать выполнение повторных функций. А через js не хочу ничего делать ибо человек сможет изменить значения в консоли разработчика и все равно вызвать повторные функции. Помогите пожалуйста совсем отчаялся.
  • Вопрос задан
  • 375 просмотров
Пригласить эксперта
Ответы на вопрос 4
@iaskivsky
Если это кнопка, то самый простой способ присваивать после нажатия атрибут disable ...
Ответ написан
@RidgeA
где-то в сессию пользователя, например, ставить флаг, что такой-то запрос уже выполняется для пользователя.
Ответ написан
Комментировать
Окей, а почему бы вам не снимать обработчик с кнопки именно с помощью js? Вы не привели пример вашего кода, потому приходится гадать на кофейной гуще.
Вариант 1:
Допустим, у вас есть обработчик и допустим, что вы используете jquery и аяксом отправляете данные на сервер.
$("#button").click(function(data){

	$(this).off();//Отключаем обработчики ВСЕХ событий висящих на данном элементе
        $.ajax({
		method: "POST",
		url: "pathToFile.php",
		data: data,
		success: function(result){
			//А здесь включаем обработчик обратно, уже после выполнения вашей Php  функции и полчуения ответа от обработчика на сервере
			$("#button").on(); 
		}
    })
});

Естественно код выше - накаляканная за две секунды паста и абсолютно не работоспособна в ваших условиях. Так что если вам придется по душе данное решение - необходимо будет довести его до ума.
Вариант 2
На стороне сервера вам необходимо как-то идентифицировать пользователя, от которого приходит запрос. Как вы это сделаете - вопрос десятый.
Самым простым вариантом, как мне кажется, будет использование БД.
Создаете таблицу, в которую пишете те данные, по которым вы идентифицируете пользователя, и время, после наступления которого вашу функцию можно будет выполнить. К примеру это время запроса + 5 секунд.
Ну а дальше при каждом последующем запросе теребите таблицу, берите из неё время, сравнивайте с текущим и решайте, обрабатывать запрос или нет.

А можете, для уверенности, комбинировать эти два варианта
Ответ написан
Комментировать
sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
Может это подойдет
function test(){
    static $lock = false;
    if(!$lock){
        $lock = true; // ф-ция выполняется, больше не выполнять
        //выполняем ф-цию
    }
}

Или вот
function test(){
    $time = $_SESSION['time'] ?? 0;
    if($time < time()){
        //выполняем ф-цию
        $_SESSION['time'] = time() + 30; // ф-цию можно выполнять раз в 30 сек.
    }
}

Или вот
function test(){
    $time = $_COOKIE['time'] ?? 0;
    if($time < time()){
        //выполняем ф-цию
        setcookie('time', time() + 30); // ф-цию можно выполнять раз в 30 сек.
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы