我想将搜索条件输出的记录下载到excel。 由于搜索条件的字段超过20.我使用POST方法而不是GET提交表单。
单击“Download2excel”,隐藏变量name1设置为Yes。所以我会检查我的代码中的条件。下载成功后,我想重置变量。
以下是我的代码的示例结构。
<html>
<head>
<?php
if(trim($_POST['name1']) == 'yes') {
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=$filename.xls");
}else {
?>
</head>
<body onload="tempFn()">
<script language="javascript" type="text/javascript">
function tempFn(){
global_search.name1.value = "";
}
function gs_download2xl_c() {
document.getElementById('name1').value="yes";
document.global_search.submit();
}
</script>
<form name="global_search" id="global_search" action="test_1.php" method="POST">
<input type="text" id="name1" name="name1" />
<a class="underline" style="cursor: pointer" onclick="gs_download2xl_c();">
Download2excel
</a>
</form>
<?php } ?>
</body>
</html>
由于我在发布表单后没有执行表单,因此我无法访问变量name1。我想重置变量name1。
请建议我一个更好的程序。
编辑: -
我想在提交表单后触发下载。由于下载到excel的记录应遵循输入搜索条件。
答案 0 :(得分:3)
我似乎并不完全理解你的问题。但我肯定会提出一些建议:
header(...)
应该出现。这意味着您必须在任何其他输出行之前移动该行。查看http://php.net/manual/en/function.header.php 尝试以下内容:
<script>
function tempFn(){
global_search.name1.value = "";
}
</script>
<body onload="tempFn()">
</body>
编辑1 :如果我了解您的要求,您可能需要下载excel文件,其内容取决于对数据库的查询或其他内容。如果我错了,请纠正我。为此,您可能需要了解如何将数据写入Excel格式。只需在通过header(...)
设置正确的标头后回显数据即可。为此你可能想谷歌关于PHP的输出Excel。我用Google搜索,我得到了这个:http://code.google.com/p/php-excel/
if(trim($_POST['name1']) == 'yes') {
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=$filename.xls");
//echo the data here.
}
else {
//the form goes here
}
编辑2
没有!标签上的每个“外部”字符都“输出”到浏览器中。在您的情况下,<html><head>
将转到浏览器。然后在PHP脚本中设置内容类型,这是不正确的。
试试这个:
<?php
if(trim($_POST['name1']) == 'yes') {
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=$filename.xls");
}else {
?>
<html>
<head>
<script language="javascript" type="text/javascript">
function tempFn(){
global_search.name1.value = "";
}
function gs_download2xl_c() {
document.getElementById('name1').value="yes";
document.global_search.submit();
}
</script>
</head>
<body onload="tempFn()">
<form name="global_search" id="global_search" action="test_1.php" method="POST">
<input type="text" id="name1" name="name1" />
<a class="underline" style="cursor: pointer" onclick="gs_download2xl_c();">
Download2excel
</a>
</form>
<?php } ?>
</body>
</html>
答案 1 :(得分:0)
编辑:基于已修改问题的新答案
为了做你想做的事,你需要使用GET变量并生成一个新窗口
实施例
if( isset($_GET['name1']) ) // if the field is set then we are receiving the form fields
{
//Process Fields here
//Send file here
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=$filename.xls");
$handle = fopen("filename","r");
echo fread($handle,filesize($filename.".xls"));
fclose($handle);
die; //We kill the script here so it doesnt try to print the rest of the file
}
?>
<script language="javascript" type="text/javascript">
function gs_download2xl_c() {
//get fields
var Query = new Array();
Query.push( "name="+document.getElementById("name1") );
url = "test_1.php?"+Query.join("&");
window.open(url);
document.getElementById("global_search").reset();
}
</script>
<form name="global_search" id="global_search" action="test_1.php" method="POST">
<input type="text" id="name1" name="name1" />
<a class="underline" style="cursor: pointer" onclick="gs_download2xl_c();">
Download2excel
</a>
</form>