Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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
在按钮onClick上将PHP变量发送到新文件_Php_Javascript_Ajax - Fatal编程技术网

在按钮onClick上将PHP变量发送到新文件

在按钮onClick上将PHP变量发送到新文件,php,javascript,ajax,Php,Javascript,Ajax,我试图允许下载用户搜索我们的库存时生成的结果(表)。我想能够点击一个按钮下载到一个CSV文件的结果。如果在运行查询后直接添加PHP代码,我就能够生成CSV文件。但是,我需要将此按钮放在页面上的其他位置,因此我希望能够调用此函数来发送查询结果,而不是直接在搜索之后 如果我这样做,那么我就能够生成文件 function output_csv ($data) { $filename = "exportfile.csv"; $handle = fopen($filename, 'w+');

我试图允许下载用户搜索我们的库存时生成的结果(表)。我想能够点击一个按钮下载到一个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>
$file\u array=$db->prepare(“从UserProfile中选择UserID、UserName”);
$file_array->execute();

首先放置锚定标记,而不是按钮

$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>
希望它能正常工作


有三个问题:

  • onclick需要JavaScript,您只需给它一个URL。也许用一个小表格试试
  • $file\u数组
    是一个数组,您必须首先通过或获取数据,然后使用和对其进行编码
  • 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>
    post表单的另一个好处是数据将以不可见的方式传输。所以你在浏览器中看不到很长很奇怪的URL。此外,可以传输的数据量要高得多。

    您不能将echo数组编码为json,然后echo@dianuj我不知道如何使用json,你能给我举个简单的例子吗?谢谢为什么不在
    download\u file.php
    文件上执行查询?有许多查询会根据搜索类型生成表。我希望能够传递变量,而不是再次重复。您的onclick URI格式不正确-它将是onclick=“download\u file.php?pass\u array=1,billy)”。您需要将每个项目放入其on-uri变量download_file.php?id=&name=是的,它是PDO,很抱歉忘了提及如何在download_file.php上获取文件_数组?通过帖子?@LuisP添加了如何获取第二个文件中数据的示例。您希望从SQL查询中得到多少行?这取决于,从20到100行。我能够获取该文件,但现在我在foreach中得到一个fputcsv错误,它说“不能使用stdClass类型的对象作为数组”,我将它添加到jsfiddle供您查看(知道它显然不起作用)-在调用output_csv function=PHP Parse error的行中得到一个错误:语法错误,意外'(',在第3almost works行的download_file.php中应为'&'或变量(T_variable)!我现在收到一个错误“为foreach()提供的参数无效”'奇怪,错误消失了,但我的输出文件是三行:标题,然后是一行,每列有'1',下一行每列有'a'。不确定它是否相关,但1是查询中第一个用户ID的第一个数字,a是查询中用户名的第一个字母。我是否也要进行回迁L <?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> 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);