@nikitoshq

Как заблокировать повторное выполнение PHP скрипта?

Здравствуйте! Есть магазин на движке OpenCart. В нем есть модуль для расширения корзины, и в этом модуле есть небольшая проблема - клиент, при оформлении заказа может несколько раз нажать кнопку "Подтвердить заказ", и заказ будет создаваться несколько раз. Пытался сделать блокировку кнопки после её нажатия с помощью JS, не получилось. Сейчас хочу попробовать заблокировать повторное выполнения контроллера, который заносит заказ в базу. Пытался сделать вот так:
function blockScript(){
        $lock = fopen('/tmp/lock_file.lock', 'w');
        if ( !($lock && flock($lock, LOCK_EX | LOCK_NB)) ) {
          sleep(5);
          blockScript();
        }
      }

Не работает, может кто-то сталкивался с такой проблемой?
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Ваши попытки напоминают операцию по удалению гланд через уретру, так как пациент отказался открыть рот. Вам абсолютно верно посоветовали СТАНДАРТНЫЕ методы работы с формой,
1) Заблокировать кнопку субмита или задать всему блоку pointer-events: none; user-select: none;, что отключит интерактивность формы.
2) После субмита, на стороне сервера делать редирект на какую-то страницу суксесс заказа, для предотвращения повторной отправки рефрешем.
3) Можно извратиться на стороне сервера и проверять был ли добавлен от этого клиента заказ в течение последних ЭН минут, но обычно после первых двух вариантов это не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы