За последние 24 часа нас посетил 72921 программист и 10235 роботов. Сейчас ищут 2882 программиста ...

запись в текстовый файл в фоновом режиме

Тема в разделе "PHP для новичков", создана пользователем Romeo4755, 15 дек 2017.

  1. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте.
    Я понимаю, что проблема тривиальна, но я что-то не могу найти, с какого бока подступиться.
    Описание проблемы: онлайн упражнения. Вот пример:
    https://itisenglish.ru/Trainer_folder/Trainer_Starter_D_7.html
    При нажатии на "Отправить рапорт" работает php-файл - из JS передается длинная такая строка (сложенные вместе все предложения, которые пользователь вводил) и php записывает ее в специальный текстовый файл - так что видно, что там студент навводил и где у него были ошибки. Но это только при нажатии на кнопку.

    Задача: записывать в текстовый файл все предложения, даже если студент не нажмет на кнопку, а просто бросит упражнение. Как раз тут интересно посмотреть - что не получалось.

    Решение 1 (не получается): Записывать суммированную строку в текстовый файл всегда перед закрытием окна. В JS прописываю
    Код (Javascript):
    1. window.onbeforeunload  = writespyreport;
    2.  
    3. function writespyreport () {
    4.     document.location.href = "writespy.php";
    5. }
    onbeforeunload в Хроме срабатывает только, если пользователь из этого же окна переходит по другому адресу, а при закрытии вкладки (окна) вообще не срабатывает
    (это не говоря о проблеме перехода на др страницу)

    Решение 2 Записывать предложение, введенное студентом каждый раз, когда он, введя предложение, жмет на "Проверить" Но! Тогда откроется php, а данные, введенные студентом и насчитанные до этого предложения (в одном упражнении их несколько) канут в лету.

    Подскажите, пожалуйста, как мне быть.
    С базами данных не работала и не оч хочется, потому что при записи в базу каждый раз идет авторизация, а текстовый файл легко записать и легко посмотреть его содержание.
    Я не программист.
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Используйте событие change (.onchange) и отправляйте данные на сервер не сменой локации, а через ajax-запросы. А когда он нажмет на кнопку - можно сменить локацию.
     
    #2 Maputo, 15 дек 2017
    Последнее редактирование: 15 дек 2017
    Romeo4755 нравится это.
  3. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, за совет, но если бы я пользовалась и владела аяксом, и вопросов бы не было. Пойти освоить аякс - это задача как мин на месяц, а не просто функцию дописать.
    Мне казалось, проще как-то поймать закрытие вкладки. Неужели это событие такое неуловимое?
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Событие, которое Вам нужно - change. Оно сработает тогда, когда пользователь напишет что-то и перейдет на другую вкладку или закроет эту.
     
    Romeo4755 нравится это.
  5. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    Но я так понимаю, что для window onchange не работает, а срабатывание при каждом нажатии клавиши в окне ввода (которого окна может даже не быть на экране или их могут быть несколько) - это эквивалент нажатию кнопки после ввода всего предложения = нужен аякс.
    (Если бы window.onchange срабатывало в Яндекс хроме, например - функция запускалась бы каждый раз, когда студент открывает другую вкладку, чтобы найти слово в словаре.)

    Можно сформулировать проблему по другому - как перед уходом со страницы записать в текстовый файл некое подготовленное значение?
     
    #5 Romeo4755, 17 дек 2017
    Последнее редактирование: 17 дек 2017
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ну программирование это и есть сочетание некоторых действий, которые в итоге превращаются в алгоритм. при обновлении данных пользователем - следи за этими обновлениями где-то на фоне. а при уходе со страницы - быстренько сбрось разведданные аяксом себе на сервер. делов-то...
     
    Romeo4755 нравится это.
  7. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    При уходе со страницы можно и не скрытничать - просто перейти на php, зафиксировать данные и пожелать студенту удачи. Только уход со страницы я качественно поймать не могу - не срабатывает onunload, а onbeforeunload срабатывает только при переходе. (Яндекс браузер)
    Хорошо, я понимаю так:
    - отследить закрытие страницы (вкладки) или переход на другой адрес нет сейчас никакой возможности. onunload и onbeforeunload в 2017 году бесполезны.
    - для записи данных в процессе, без обновления страницы, кроме аякса других методов нет.
    Спасибо за информацию по кр мере не буду тратить время на бесплодные поиски того, чего нет.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Даже не знаю что тебе сказать. У меня в софте корпоративного назначения если кто-то куда-то пошел - клиент успевает аякснуть нужные мне данные. А у тебя конечно же может быть альтернативная реальность в которой наши советы бесполезны.
     
  9. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    Я, честно скажу, ничего не понимаю. О чем вы мне советуете - мож, я чего-то в жизни важное пропускаю?
    Аякс, как я уже указывала, мне пока неподвластен.
    КАК отловить уход со страницы? Не важно, чем и как записывать в базу или в текстовый файл. Юзер замучался и закрыл вкладку - как это событие поймать? Где найти валидную инфу за 2017 год, работают или не работают onunload и onbeforeunload?
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    на can i use можно найти инфу по поддержке браузерами тех или иных фич. относительно закрытия вкладки - тут уже расширение придется писать скорее всего.
     
    Romeo4755 нравится это.
  11. Romeo4755

    Romeo4755 Новичок

    С нами с:
    15 дек 2017
    Сообщения:
    6
    Симпатии:
    0
    ОК, поняла. Короче, Закрытие шиш поймаешь со всеми разнообразными устройствами и версиями браузеров.