标题& exit()导致无响应的表单提交

时间:2011-10-13 10:26:29

标签: 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(批量) div和span):

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

3 个答案:

答案 0 :(得分:1)

当您反复按下按钮时,请求未被发送的事实似乎表明客户端存在问题。检查客户端的formSubmit()函数或页面源,看看附件下载是否可能搞砸了Javascript。

答案 1 :(得分:0)

您在问题中描述的问题与您发布的代码无关。

我无法重现您的问题:

<?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>

Test for yourself。希望这有助于澄清你的错误至少在哪里。

答案 2 :(得分:0)

@Tom Houdmont,因为我理解你的问题: 文件下载脚本一般基于头功能。 使用header()函数有一个条件,你只能发送标题信息,不能回显,或者不能在它之前或之后发送任何类型的文本(空格)。否则,它会显示警告:已发送标题()信息

根据您的代码我尝试了一个例子: 在您的案例表单操作和下载脚本中,两者都在同一页面上,因此当您的表单发布时,检查在header()开始,即标记或空格之前是否打印任何类型(甚至是空格)数据。或者你应该覆盖整个...在PHP if else声明。

我上传了简单的图片下载脚本。这是链接。您可以下载并运行。 http://code.google.com/p/mixexperiments/downloads/detail?name=imagedownload.rar&can=2&q=

如果你仍然没有得到它,让我更清楚,我会尽我所能