我试图允许下载用户搜索我们的广告资源时生成的结果(表格)。我希望能够单击按钮将结果下载到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函数,以便将它们写入文件。
谢谢,
答案 0 :(得分:1)
有三个问题:
$file_array
是PDOStatement,您必须先按fetchAll()或fetch()获取数据,然后使用json_encode()和{{3对其进行编码}}。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="<?php echo htmlspecialchars(json_encode($file_array->fetchAll(PDO::FETCH_NUM)); ?>"> <input type="submit"> </form>
获取download_file.php
中的数据:
function output_csv ($data) { $filename = "exportfile.csv"; $handle = fopen($filename, 'w+'); fputcsv($handle, array('UserID','UserName')); foreach($data as $row) { fputcsv($handle, $row); } fclose($handle); } $file_array = json_decode($_REQUEST['pass_array']); output_csv($file_array);
帖子表单的另一个好处是数据将以不可见的方式传输。因此,您在浏览器中看不到真正冗长且奇怪的URL。此外,可以传输的数据量要高得多。
答案 1 :(得分:0)
首先放置锚标记而不是按钮
$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>
你的download_file.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);
}
希望它运作良好