问题下载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>
答案 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=
如果你仍然没有得到它,让我更清楚,我会尽我所能