gpt4 book ai didi

PHP导出mysql数据到excel表

转载 作者:行者123 更新时间:2023-11-30 01:20:10 25 4
gpt4 key购买 nike

我有一个过滤器,用户可以选择或输入信息,当他们点击提交时,会使用以下代码生成一个查询:

 <?php 
function displayrecords(){
$data1 = $_POST['data1'];
$data2 = $_POST['data2'];
$data3 = $_POST['data3'];
$sql_json = "";
$where = "";
if($data1 != ""){
$where = " `data1` = '".mysql_real_escape_string($data1)."'";
}
if($data2 != ""){
if ( $where != "" ) $where .= " AND ";
$where = " `data2` = '".mysql_real_escape_string($data2)."'";
}
if($data3 != ""){
if ( $where != "" ) $where .= " AND ";
$where = " `data3` = '".mysql_real_escape_string($data3)."'";
}
if ($where != "") $sql_json = "SELECT * FROM `database`" . " WHERE " . $where . ";";
$QueryResult = @mysql_query($sql_json) or die (mysql_error());

echo "<table>"
echo "<tr><th>Data1</th>" . "<th>Data2</th>" . "<th>Data3</th></tr>\n";
while(($Row = mysql_fetch_assoc($QueryResult)) !== FALSE) {
echo "<tr><td>{$Row['data1']}</td>";
echo "<td>{$Row['data2']}</td>";
echo "<td>{$Row['data3']}</td></tr>\n";
};
echo "</table>"\n";
}
}

然后它会输出数据:

 <?php displayrecords(); ?>

这里没有问题。查询生成器可以工作。数据以表格形式呈现到屏幕上。

我现在需要做的是获取已返回到屏幕的数据,并使用与其他提交按钮相同表单的另一个按钮将其导出到 Excel 工作表。这是相同形式的按钮:

 <input class="btn btn-success btn-small" type="submit" name="get_report" value="Get Report" />

我不知道是否可以使用同一表单中的另一个提交按钮。我认为必须使用 javascript onclick() 函数。我不知道。我只需要把返回的数据导出到excel即可。

有人可以帮忙吗?

最佳答案

需要考虑的一些事项:

不要在函数中使用$_POST[]。它将函数限制为仅处理 POST。相反,使用您的 POST 数据调用该函数。

从数据库中检索数据并在其自己的函数中返回,例如 getTableData(),以便您的 HTML 和电子表格脚本能够独立查询数据,而无需冗余代码。

此外,始终建议使用 mysqli_ 或 PDO 而不是 mysql_*,因为 mysql_ 已弃用。

我不会在这个答案中解决数据库查询或 html 表显示的问题,因为看起来您完全有能力自己处理这方面的任务。

考虑到所有这些,我的方法如下:

在 HTML 表格的末尾,将 csv 文件的链接放置在子目录中,如下所示:

<a href='download/some.csv?<?php echo 'data1='.urlencode($_POST['data1'], ENT_QUOTES).'&amp;data2='.urlencode($_POST['data2'], ENT_QUOTES).'&amp;data3='.urlencode($_POST['data3'], ENT_QUOTES).; ?>'>Download CSV</a>

然后,在您的 download 文件夹中,您需要一个包含以下内容的 .htaccess 文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ getFile.php?file=$0 [QSA,L]

此外,您还可以在 download 文件夹中放置一个 getFile.php 文件,该文件可能如下所示:

<?php

$fileName = (isset($_GET['file'])) ? $_GET['file'] : false;
$data1 = (isset($_GET['data1'])) ? $_GET['data1'] : false;
$data2 = (isset($_GET['data2'])) ? $_GET['data2'] : false;
$data3 = (isset($_GET['data3'])) ? $_GET['data3'] : false;

if($fileName && $data = getTableData($data1, $data2, $data3)) //This would be calling your new function designed specifically to retrieve your data in a multidimensional array
{
header("HTTP/1.0 200 OK");
header("Content-Type: text/csv");
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
foreach($data as $row)
{
foreach($row as $columnCount=>$field)
{
echo ($columnCount) ? ','.csvField($field) : csvField($field);
}
echo "\r\n";
}
}
else header("HTTP/1.0 404 Not Found");

function csvField($value, $textDelimiter = '"')
{
if (strstr($value, $textDelimiter) || strstr($value, ",")) $value = $textDelimiter.str_replace($textDelimiter, $textDelimiter.$textDelimiter, $value).$textDelimiter;
return $value;
}

?>

.htaccess 文件将文件名传递到 $_GET 参数中的 getFile.php 脚本。您的 .csv 文件不得实际存在,以便 .htaccess 可以将请求重定向到 getFile.php

确保在 getTableData() 函数中,传递的变量受到适当的保护,防止 SQL 注入(inject)。

关于PHP导出mysql数据到excel表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18640808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com