我正在尝试允许下载用户搜索我们的库存时生成的结果(表)。我希望能够点击一个按钮将结果下载到CSV文件中。如果在运行查询后直接添加PHP代码,我就可以生成CSV文件。然而,我需要这个按钮在页面上的不同位置,因此我希望能够调用这个函数来发送查询结果,而不是直接在搜索之后。
如果我这样做,那么我就能够生成文件。
function output_csv ($data) {
$filename = "exportfile.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, array('UserID','UserName'));
foreach($row = $data->fetch(PDO::FETCH_ASSOC)) {
fputcsv($handle, array($row['UserID'], $row['UserName']));
}
fclose($handle);
}
我知道PHP是服务器端的,所以如果它和按钮在同一个页面上,我就不能在onclick上调用这个函数。因此,我想我应该把这个函数放在一个单独的文件中,我可以从onclick调用它。但我无法找到传递$data(查询结果)的方法,它一直告诉我变量不能转换为字符串。
$file_array=$db->prepare("SELECT UserID, UserName FROM UserProfile");
$file_array->execute();
<button type="button" onclick="download_file.php?pass_array=<?php echo $file_array; ?>)">Click Me</button>
因此,我的问题是,我无法弄清楚如何将查询结果发送到我的页面或其他页面中的output.csv函数,以便将其写入文件。
谢谢,
有三个问题:
- onclick需要JavaScript,您只需给它一个URL。也许可以用小表格试试
$file_array
是一个PDOS语句,您必须首先通过fetchAll()或fetch()获取数据,然后使用json_encode()和htmlspecialchar()对其进行编码foreach
的格式错误
尝试以下操作:
<?php$file_array=$db->prepare("SELECT UserID,UserName FROM UserProfile");$file_array->execute();><form method="POST"action="download_file.php"><input type="hidden"name="pass_array"value="<?phpecho htmlspecialchar(json_encode($file_array->fetchAll(PDO::FETCH_NUM));>"><input type="submit"><表单>
获取download_file.php
:中的数据
函数output.csv($data){$filename="exportfile.csv";$handle=fopen($filename,'w+');fputcsv($handle,array('UserID','UserName'));foreach($data作为$row){fputcsv($handle,$row);}fclose($handle);}$file_array=json_decode($_REQUEST['pass_array']);output.csv($file_array);
张贴表格的另一个好处是,数据将以一种看不见的方式传输。所以你不会在浏览器中看到很长很奇怪的URL。此外,可以传输的数据量要高得多。
首先放置锚点标签而不是按钮
$file_array=$db->prepare("SELECT UserID, UserName FROM UserProfile");
$file_array->execute();
$result = $file_array->fetch(PDO::FETCH_ASSOC);
<a href="download_file.php?pass_array=<?php echo urlencode(json_encode($result)); ?>">Click Me</a>
在您的下载文件.php 中
if(!empty($_REQUEST['pass_array'])){
$arraydata=json_decode(urldecode($_REQUEST['pass_array']));
output_csv ($arraydata);
}
function output_csv ($data) {
$filename = "exportfile.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, array('UserID','UserName'));
foreach($data as $row) {
fputcsv($handle, array($row['UserID'], $row['UserName']));
}
fclose($handle);
}
希望它运行良好
pdostatement.fetch