发布表单后重置隐藏变量

时间:2011-01-03 15:11:07

标签: php javascript html

我想将搜索条件输出的记录下载到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的记录应遵循输入搜索条件。

2 个答案:

答案 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>