@nikitoshq

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

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

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

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

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