Заголовки и выход (), вызывающие неотвечающую отправку формы

#php #html

#php #HTML

Вопрос:

Проблема После однократной загрузки CSV-файла форма не отправляет запрос на отправку.

Цель: загрузить CSV-файл с информацией после выбора нескольких критериев для загрузки.

PHP-скрипты:

export.php отображает HTML-форму, позволяющую пользователю выбирать определенные критерии (которые в основном устанавливают пару переменных, а затем отправляют эти критерии для загрузки файла CSV.

exportEntrants.php использует эти переменные, заданные формой, для извлечения соответствующих данных из базы данных, создания данных CSV и последующего предоставления их для загрузки пользователю.

Итак, у export.php нас есть следующий фрагмент:

 require_once 'exportEntrants.php';
if(/*the form is submitted*/){
    export($criteria);
}
else{
    // Display the HTML Form
}
  

Который успешно вызывает exportEntrants.php скрипт при отправке формы в первый раз.

Затем exportEntrants.php данные создаются правильно и загружаются с помощью:

 function download($content,$title) {
        header('Content-Description: File Transfer');
        header("Content-type: application/csv");
        header('Content-Disposition: attachment; filename="'.$title.'.csv";');
        echo $content;
        exit();
    }
  

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

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

Кто-нибудь может увидеть, что может быть причиной этой проблемы? Я предоставлю любую дополнительную информацию по мере необходимости.

Спасибо.

ОТРЕДАКТИРУЙТЕ в ответ на комментарий от Hakre ниже.

  • Отключение Javascript не имело никакого значения.

  • Эта проблема была протестирована в Firefox 7.0.1 и Chrome 14. Я еще не пробовал IE или Safari.

  • HTML формы выглядит следующим образом (я не включил части формы с критериями, поскольку они работают нормально, а форма генерируется довольно сложной функцией, поэтому это не маленький фрагмент HTML (много разделов и промежутков):

    <form action="/admin/export/export.php" method="post" name="exportForm" onsubmit="return formSubmit()"><input type="submit" name="submit_butt" value="EXPORT" class="button"></form>

Комментарии:

1. Попробуйте использовать HttpFox или другой HTTP-анализатор, чтобы проверить, действительно ли ваш запрос отправлен.

2. @Lekensteyn Я попробую это сейчас. Спасибо РЕДАКТИРОВАТЬ: запрос не отправляется. Я боюсь, что наличие этой новой части знаний мне не очень помогает, но, может быть, кто-то еще?

3. Что произойдет, если отключить javascript? Какой браузер вы используете? Что такое HTML формы?

4. @hakre Я отредактирую исходное сообщение, чтобы включить эту информацию сейчас.

5. @hakre Content-Disposition — это RFC-совместимый заголовок HTTP / 1.1 w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 и работает для меня в MSIE, Firefox и Chrome.

Ответ №1:

Тот факт, что запрос не отправляется при повторном нажатии кнопки, по-видимому, указывает на проблему на стороне клиента. Проверьте функцию formSubmit () или источник страницы на стороне клиента и посмотрите, может быть, загрузка вложения каким-то образом испортила Javascript.

Комментарии:

1. Это оказалось правильным ответом. formSubmit() отслеживал количество раз, когда он был отправлен, и предотвращал дальнейшие отправки.

Ответ №2:

@Tom Houdmont насколько я понимаю ваш вопрос: скрипты загрузки файлов обычно основаны на функции заголовка. Использование функции header () имеет условие, что вы можете отправлять только информацию заголовка и не можете передавать эхо или отправлять какой-либо текст (пробел тоже) до или после него. В противном случае он покажет вам предупреждение: эта информация header () уже отправлена

Основываясь на вашем коде, я попробовал один пример: в вашем случае действие формы и сценарий загрузки находятся на одной странице, поэтому, когда ваша форма post, проверьте, что перед запуском header () печатаются любые данные (даже пробелы), т.е. Или тег, или пробел. или вы должны покрыть все… в операторе PHP if else.

Я загрузил простой скрипт загрузки изображений. вот ссылка. Вы можете загрузить и запустить. http://code.google.com/p/mixexperiments/downloads/detail?name=imagedownload.raramp;can=2amp;q =

если вы все еще не поняли, объясните мне более ясно, я буду стараться изо всех сил

Ответ №3:

Проблема, которую вы описываете в своем вопросе, не связана с опубликованным вами кодом.

Я не могу воспроизвести вашу проблему:

 <?php
if ($_POST)
{
        $title = 'test';
        $content = 'Example file.';

        header('Content-Description: File Transfer');
        header("Content-type: plain/text");
        header('Content-Disposition: attachment; filename="'.$title.'.txt";');
        echo $content;
        exit();

}

?>
<form method="post" action=""><input type="submit" name="submit" value="download"></form>
  

Проверьте сами. Надеюсь, это поможет прояснить, где, по крайней мере, не ваша ошибка.