За последние 24 часа нас посетили 63003 программиста и 1737 роботов. Сейчас ищут 838 программистов ...

Странный баг замноженных заявок

Тема в разделе "Прочие вопросы по PHP", создана пользователем steel_mx, 28 янв 2016.

  1. steel_mx

    steel_mx Новичок

    С нами с:
    30 май 2015
    Сообщения:
    10
    Симпатии:
    0
    Всех приветствую! Попросили посмотреть довольно странный баг. Вообщем, есть форма заказа. Есть отдельный скрипт обрабатывающий POST-данные (т.е. в action="" прописан скрипт НЕ текущей стр-цы). Все работает отлично. Однако владелец сайта жалуется на один баг. Периодически, изредка, идут замноженные заявки. Это может произойти раз в полтора месяца, а может и пару раз в неделю. Т.е. клиент говорит что сделал заказ, и ОДИН раз нажал на кнопку "отправить". Потом идет куча заявок(+уведомлений клиенту, т.е. на каждую заявку-есть уведомление клиенту об успешной заявке).
    1) "Куча" заявок может прийти как Разом, так и разорванно по времени, например идут в течение неск-ких дней.
    2) На сервере есть файл в котором храниться id последней заявки. PHP скрипт, при отправке заявки каждый раз считывает id, и увеличивает его на 1. Дак вот замноженные заявки идут ВСЕ под НОВЫМИ номерами.

    С одной стороны это пахло бы тем что не сброшены POST данные. Все помнят это думаю, когда они не сброшены, если в action="" прописан тот же скрипт что и генерирует страницу с формой (помойму так да?), то при refresh-е, будет идти столько заявок сколько вы будете жать кнопку "обновить" . Решалось тем что отправляли header() с $_SERVER['PHP_SELF'], чтобы сбросить POST данные.
    Однако, во-первых, я тестировал как только можно, жал кнопку "обновить", во всех браузерах, жал и повторно на кнопку "отправить" и хоть бы фиг, мне идет ТОЛЬКО по ОДНОЙ заявке. Тем более Firefox писал бы такое http://c2n.me/3tyFFRu , однако он этого не выдавал. Пробовал и выводить POST массив, он пуст(при повторных рефреш-ах).
    Во-вторых, если бы проблема была в POST-массиве, то не понятно как тогда идут заявки в течении НЕСК-КИХ дней (клиенты каются что делали завку 1 раз)?

    -USER_AGENT проверялось, ничего специфичного не было. Т.е. каких-то специфичных браузеров, или операционок. Последняя замноженная заявка была сделана под Windows7, Google Chrome.
    -Все клиенты, у кого это происходило, вроде нормальные (в том смысле что не флудеры, а сделавшие реальный заказ, оплатившие деньги и тп. И в том числе сами писавшие с жалобой на замноженные уведомления об успешной заявке)

    Как я только не тестировал, - мне шло всегда по одной заявке. В какую хоть сторону копать? Как то уже даже самому интересно, просто=))
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Omg.
    Что-то мне подсказывает что простым вангованием дело не обойдётся. Давай хоть какой код, желательно обработчика формы. Ели он суёт данные в базу, то дело в нём.
     
  3. steel_mx

    steel_mx Новичок

    С нами с:
    30 май 2015
    Сообщения:
    10
    Симпатии:
    0
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
  5. steel_mx

    steel_mx Новичок

    С нами с:
    30 май 2015
    Сообщения:
    10
    Симпатии:
    0
    Проблема явно не в этом участке. Пробовалось, убираться. Если же вы о качестве кода, то писала его одна из начинающих московских студий, не я.
     
  6. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Простите, я вам скорее всего не помогу, но честно признаюсь, что хотел. Однако сеи строки, да и само произведение строго "не очень". Боюсь тут проблемы не отдельно взятого места, а структуры как таковой. С этим здесь полный капец.
     
  7. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    включение предварительной загрузки страниц в браузере не может оказывать такое влияние на скрипт?
    заявку отправляет авторизованный пользователь? логи авторизаций и датавремя заявок?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Завершай обработку post-запроса редиректом. Это 100% помогает от непроизвольных повторов.
     
  9. steel_mx

    steel_mx Новичок

    С нами с:
    30 май 2015
    Сообщения:
    10
    Симпатии:
    0
    Хмм любопытная фича, буду мониторить данную тему. Но я как понял она вроде по умолчанию включена, нет? Либо если указываются rel="prefetch" у ссылок. Там такого нет, проверил
    Нет не авторизованные. Любой гость может сделать заявку.
     
  10. steel_mx

    steel_mx Новичок

    С нами с:
    30 май 2015
    Сообщения:
    10
    Симпатии:
    0
    Да не проблема конечно, старина=) Мне просто самому как то любопытно стало=) Ну как блин скрипт на сервере может САМ выполняться спонтанно? Самое странное что заявки чаще бахают не разом, а идут в течение НЕСК-КИХ дней.