0

我试图允许下载用户搜索我们的库存时生成的结果(表格)。我希望能够单击一个按钮将结果下载到 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 函数,以便将它们写入文件。

谢谢,

4

2 回答 2

1

存在三个问题:

  1. onclick 需要 JavaScript,您只需给它一个 URL。也许用一个小表格试试?
  2. $file_array是一个PDOStatement,您必须首先通过fetchAll()fetch()获取数据,然后使用json_encode()htmlspecialchars()对其进行编码。
  3. foreach格式错误。

尝试以下操作:

<?php
$file_array=$db->prepare("SELECT UserID, UserName FROM UserProfile");
$file_array->执行();
?>
<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));
    ?>">
    <输入类型="提交">
</form>

要获取 中的数据download_file.php

函数 output_csv ($data) {
  $filename = "exportfile.csv";
  $handle = fopen($filename, 'w+');
  fputcsv($handle, array('UserID','UserName'));
  foreach($data as $row) {
     fputcsv($handle, $row);
  }
  fclose($句柄);
}
$file_array = json_decode($_REQUEST['pass_array']);
output_csv($file_array);

发布表单的另一个好处是数据将以不可见的方式传输。所以你不会在浏览器中看到很长很奇怪的 URL。此外,可以传输的数据量要高得多。

于 2013-08-08T21:54:40.413 回答
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);
}

希望它工作正常

pdostatement.fetch

于 2013-08-08T21:53:55.757 回答