Почему некоторые переменные $ _POST теряются для формы с PHP? - PullRequest
0 голосов
/ 21 апреля 2010

Иногда несколько раз в день пользователи моего веб-приложения отправляют определенную форму, содержащую около десятка полей формы, половина из которых является скрытыми, а половина данных $ _POST просто отсутствует в скрипт обработки. Обратите внимание, что поля, которые отсутствуют, находятся в самом низу формы. Я знаю это, потому что это приводит к фатальной ошибке, и мне отправляется электронное письмо, содержащее данные постов.

И, конечно, ни я, ни кто-либо из разработчиков в моей команде не могут воспроизвести проблему.

В этом процессе участвует Flash, так как я использую библиотеку Uploadify для отображения индикатора выполнения. Вот поток ... у кого-нибудь есть какие-либо идеи, почему некоторые почтовые данные будут уничтожены?

  • Пользователь посещает экран редактирования страницы в CMS, которую я использую.
  • Идентификатор записи для страницы помещается в форму как скрытое значение.
  • Пользователь нажимает кнопку обзора Uploadify и выбирает файл (разрешен только один выбор файла).
  • Пользователь нажимает кнопку "Отправить" для моей формы.
  • jQuery перехватывает действие отправки формы, запускает Uploadify, чтобы начать загрузку, и возвращает false для действия отправки (вручную отменяя событие отправки формы, чтобы Uploadify мог вступить во владение).
  • Uploadify загружает в пользовательский скрипт процесса.
  • Uploadify завершает загрузку и запускает обратный вызов завершения Javascript.
  • Обратный вызов Javascript вызывает $ ('# myForm'). Submit () для отправки формы.

Это происходит в нескольких браузерах (Firefox 3.5, 3.6, Safari, Internet Explorer 7, 8) и на нескольких платформах (Mac OS 10.5, 10.6 и Windows XP, 7).

Ответы [ 6 ]

1 голос
/ 22 апреля 2010

Моя первая мысль - недействительный HTML.Вы говорите скрытые поля в конце.Возможно, некоторые из данных, встроенных в них, не подготовлены или не экранированы.

Поскольку вы действительно получаете некоторые данных, я мог бы начать использовать jquery для создания некоторого типа контрольной суммыэлементы формы и значения, о которых она знает, и отправьте эту агрегированную контрольную сумму вместе с постом формы.В зависимости от того, возникли ли у вас проблемы с его запуском, это может очень раскрыть вашу проблему.

Вы также можете попытаться выяснить длину содержимого http-запроса, отправленного браузером.Может быть, изменить конфигурацию журнала веб-сервера.Это может быть отправка данных, и ваш сервер / скрипт неправильно их обрабатывают.

1 голос
/ 21 апреля 2010

Вы делаете что-нибудь с javascript для данных? Если это так, некоторые пользователи могут не включить JS и могут быть причиной проблемы. Попробуйте запустить форму с отключенным JavaScript.

редактировать: помогает прочитать весь пост. да, есть вероятность, что люди запускают форму без включенного JavaScript.

1 голос
/ 21 апреля 2010

Является ли цель загрузки файла (Uploadify) тем же сценарием, что и <form>?Если это так, Uploadify не будет отправлять какую-либо информацию (т. Е. Другие поля формы) при загрузке файла, если вы явно не укажете ее в параметре конфигурации scriptData.Возможно, ошибки вызваны попаданием этих страниц на страницу, что приводит к запросам, в которых отсутствуют определенные поля.

0 голосов
/ 07 апреля 2011

Это может показаться глупым ответом, но считали ли вы, что некоторые пользователи дважды щелкают мышью? Возможно, второй щелчок вызывает проблему?

0 голосов
/ 23 апреля 2010

Если поля, которые НЕ проходят, определены после поля загрузки файла в той же форме, это может быть вашей проблемой.

Если это так, вам придется разделить форму загрузки и форму данных, каждая из которых имеет свое собственное действие (лучшее решение), или указать все поля «до» формы загрузки (2-й выбор)

0 голосов
/ 22 апреля 2010

Я думаю, что ваш поток может быть неправильным. Разве вы не должны делать

1> Просмотр файла 2> После выбора файла автоматически начинается загрузка. 3> Пользователь выбирает кнопку отправки

Таким образом, вы избегаете усложнения перехвата вещей.

Вот фрагмент моего потока:

var fname = '';
$(document).ready(function() {
    $('#upload').hide();
    $('#submit_btn').hide();

    if($('#id').val()) {
        $('#upload').show();
    }
    $('#upload').uploadify({
        uploader:   'js/uploadify/uploadify.swf',
        script:     'upload.php',
        folder:     '_holder',
        auto:       true,
        cancelImg:  'images/cancel.png',
        buttonText: 'Upload File',
        width:      '120',
        onComplete: function(event, queueID, fileObj, reponse, data) {
            fname = fileObj.name;
            $("#status_msg").html( 'File Is Uploaded.' );
            $('#submit_btn').show();
       }
    });
});

Затем, конечно, я выполняю другую обработку файла из submit_btn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...