Задать вопрос
@nikitoshq

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽