单击按钮将PHP变量发送到新文件


Sending a PHP variable to a new file on button onClick

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

谢谢,

有三个问题:

  1. onclick需要JavaScript,您只需给它一个URL。也许可以用小表格试试
  2. $file_array是一个PDOS语句,您必须首先通过fetchAll()或fetch()获取数据,然后使用json_encode()和htmlspecialchar()对其进行编码
  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="<?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