Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建用于下载的csv文件的最佳方法是什么?_Php_Sql Server_Html_Csv - Fatal编程技术网

Php 创建用于下载的csv文件的最佳方法是什么?

Php 创建用于下载的csv文件的最佳方法是什么?,php,sql-server,html,csv,Php,Sql Server,Html,Csv,我有一个创建工作票的web应用程序。我的客户要求报告页面允许他们将报告下载为csv文件。我有这个功能。本质上,它是在创建报表时动态创建CSV。如果表中没有大量数据,则可以下载csv。我遇到的是,当表太大时,我达到了可以在url中传递的字符的限制。我怎样才能避开这件事?它快把我逼疯了。下面是我的php和html代码示例 创建CSV的PHP代码下载 <?php $out = ''; $filename_prefix = 'UnInvoiced'; if (isset($_RE

我有一个创建工作票的web应用程序。我的客户要求报告页面允许他们将报告下载为csv文件。我有这个功能。本质上,它是在创建报表时动态创建CSV。如果表中没有大量数据,则可以下载csv。我遇到的是,当表太大时,我达到了可以在url中传递的字符的限制。我怎样才能避开这件事?它快把我逼疯了。下面是我的php和html代码示例

创建CSV的PHP代码下载

<?php
$out = '';


 $filename_prefix = 'UnInvoiced';





 if (isset($_REQUEST['csv_hdr'])) {
 $out .= $_REQUEST['csv_hdr'];
 $out .= "\n";
 }

 if (isset($_REQUEST['csv_output'])) {
 $out .= $_REQUEST['csv_output'];
 }


 $filename = $filename_prefix."_".date("Y-m-d_H-i",time());


 header("Content-type: application/vnd.ms-excel");
 header("Content-Encoding: UTF-8");
 header("Content-type: text/csv; charset=UTF-8");
 header("Content-disposition: csv" . date("Y-m-d") . ".csv");
 header("Content-disposition: filename=".$filename.".csv");
 print $out;



 exit;
 ?>
在HTML页面上创建初始表的PHP代码

 echo "<div class='panel panel-primary'>
 <div class='panel-heading'>
 <h3 class='panel-title'>Un-Invoiced Tickets</h3>

 </div>
 <table class='table'>
 <thead>
 <tr class='filters'>
 <th>Date</th>
 <th>Ticket #</th>
 <th>Client</th>
 <th>Lease</th>
 <th>Ticket Total</th>
 <th>Ordered By</th>
 </tr>
 </thead>
 <tbody>";


  $conn = sqlsrv_connect($DBSERV, $connection);
  if (!$conn) {
  die('Could not connect: ' . sqlsrv_error($conn));
  }
  if ($client === 'All'){
  $sql="SELECT REPLACE(Client,',',' ') 
  AS Client,WorkTicketNum,Lease,Date,OrderedBy,WTTotal FROM WorkTicket WHERE Date BETWEEN '".$begin."' AND '".$end."' AND Invoiced IS NULL ORDER BY Client ";
                    }else{
                        $sql="SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy,WTTotal FROM WorkTicket WHERE Date BETWEEN '".$begin."' AND '".$end."' AND Invoiced IS NULL AND Client = '".$client."' ORDER BY Client "; 
                    }
                $result =sqlsrv_query($conn, $sql);

                while($row = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC)) { ?>
                   <tr>
                        <td> <?php echo $row['Date'];
                    $csv_output .= $row['Date'].", "; ?> </td>

                        <td> <?php echo $row['WorkTicketNum'];
                    $csv_output .= $row['WorkTicketNum'].", "; ?> </td>

                        <td> <?php echo $row['Client'];
                    $csv_output .= $row['Client'].", "; ?> </td>

                        <td> <?php echo $row['Lease'];
                    $csv_output .= $row['Lease'].", "; ?> </td>

                        <td> <?php echo $row['WTTotal'];
                    $csv_output .= $row['WTTotal'].", "; ?> </td>

                        <td> <?= $row['OrderedBy'];
                    $csv_output .= $row['OrderedBy']."\n "; ?> </td>
                         </tr>
              <?php
                }

               echo " </tbody>
        </table>
    </div>

 <br />

 <a class='btn btn-default' href='/processes/uninvoicedexport.php?  csv_hdr=".urlencode($csv_hdr)."&csv_output=".urlencode($csv_output)."'>Export to CSV</a>";                  
/*<form name='export' action='/processes/unsignedexport.php' method='post'   target='_BLANK'>
<input type='submit' value='Export table to CSV'>
<input type='hidden' value=".$csv_hdr." name='csv_hdr'>
<input type='hidden' value=".$csv_output." name='csv_output'>
</form>

<div id='ticketHint'><b></b></div>
</form>";*/
sqlsrv_close($conn);

?>

有人建议我将csv写入SQL数据库,然后在按下下载按钮时检索,但我一辈子都不知道该怎么做

您可以而且可能应该使用mysql进行输出:

SELECT * FROM tableName INTO OUTFILE 'filename.csv'

这将为您生成文件,而无需通过url传递数据。当然,您可以选择要导出的任何字段。

您可以并且可能应该使用mysql进行输出:

SELECT * FROM tableName INTO OUTFILE 'filename.csv'

这将为您生成文件,而无需通过url传递数据。当然,您可以选择要导出的任何字段。

您可以并且可能应该使用mysql进行输出:

SELECT * FROM tableName INTO OUTFILE 'filename.csv'

这将为您生成文件,而无需通过url传递数据。当然,您可以选择要导出的任何字段。

您可以并且可能应该使用mysql进行输出:

SELECT * FROM tableName INTO OUTFILE 'filename.csv'

这将为您生成文件,而无需通过url传递数据。当然,您可以选择要导出的任何字段。

如果您的mysql用户没有选择outfile的权限,并且像上面的注释一样,请不要将所有数据传递到url

尝试这种未经测试的方法,但会让您产生以下想法:

<?php
if ($_REQUEST["myaction"]=="getcsvstuff") {
 // handle the conditions you passed into $_POST or $_REQUEST 
 // set your headers, do your query and output the csv results
} else {
 // print your form to pass what you would like 
 // you may have visual results of your query here in your table etc
 // just like your example 
?>
<form action="<?php $_SERVER["PHP_SELF"];?>" method="POST">
<input type="hidden" name="myaction" value="getcsvstuff" />
<input type="submit" value="go to csv results" />
... whatever else you want to pass to the above condition... 
</form>
<?php
}
?>

如果您的mysql用户没有选择outfile的权限,并且与上面的注释类似,请不要将所有数据传递到url

尝试这种未经测试的方法,但会让您产生以下想法:

<?php
if ($_REQUEST["myaction"]=="getcsvstuff") {
 // handle the conditions you passed into $_POST or $_REQUEST 
 // set your headers, do your query and output the csv results
} else {
 // print your form to pass what you would like 
 // you may have visual results of your query here in your table etc
 // just like your example 
?>
<form action="<?php $_SERVER["PHP_SELF"];?>" method="POST">
<input type="hidden" name="myaction" value="getcsvstuff" />
<input type="submit" value="go to csv results" />
... whatever else you want to pass to the above condition... 
</form>
<?php
}
?>

如果您的mysql用户没有选择outfile的权限,并且与上面的注释类似,请不要将所有数据传递到url

尝试这种未经测试的方法,但会让您产生以下想法:

<?php
if ($_REQUEST["myaction"]=="getcsvstuff") {
 // handle the conditions you passed into $_POST or $_REQUEST 
 // set your headers, do your query and output the csv results
} else {
 // print your form to pass what you would like 
 // you may have visual results of your query here in your table etc
 // just like your example 
?>
<form action="<?php $_SERVER["PHP_SELF"];?>" method="POST">
<input type="hidden" name="myaction" value="getcsvstuff" />
<input type="submit" value="go to csv results" />
... whatever else you want to pass to the above condition... 
</form>
<?php
}
?>

如果您的mysql用户没有选择outfile的权限,并且与上面的注释类似,请不要将所有数据传递到url

尝试这种未经测试的方法,但会让您产生以下想法:

<?php
if ($_REQUEST["myaction"]=="getcsvstuff") {
 // handle the conditions you passed into $_POST or $_REQUEST 
 // set your headers, do your query and output the csv results
} else {
 // print your form to pass what you would like 
 // you may have visual results of your query here in your table etc
 // just like your example 
?>
<form action="<?php $_SERVER["PHP_SELF"];?>" method="POST">
<input type="hidden" name="myaction" value="getcsvstuff" />
<input type="submit" value="go to csv results" />
... whatever else you want to pass to the above condition... 
</form>
<?php
}
?>

不要在URL中传递数据,只需在csv输出页面中再次查询或可能在会话中插入。不要在URL中传递数据,只需在csv输出页面中再次查询或可能在会话中插入。不要在URL中传递数据,只需在csv输出页面中再次查询或可能在会话中插入。不要在URL中传递数据,只需在csv输出页面中再次查询,或可能加入会话。谢谢!我要试试这个。我会报告结果的,谢谢!我要试试这个。我会报告结果的,谢谢!我要试试这个。我会报告结果的,谢谢!我要试试这个。我将报告结果。