通过选中复选框,通过PHP将MySQL表导出到CSV
我需要在PHP页面上显示调查结果列表,然后将其导出到CSV文件。该列表还可以作为一个摘要,单击该摘要可获得完整的结果 我有所有的排序,但现在我需要有一个检查bx选择CSV导出,这样我们就不需要下载整个数据库,每次只是我们需要的 我的代码如下通过选中复选框,通过PHP将MySQL表导出到CSV,php,mysql,csv,export-to-csv,Php,Mysql,Csv,Export To Csv,我需要在PHP页面上显示调查结果列表,然后将其导出到CSV文件。该列表还可以作为一个摘要,单击该摘要可获得完整的结果 我有所有的排序,但现在我需要有一个检查bx选择CSV导出,这样我们就不需要下载整个数据库,每次只是我们需要的 我的代码如下 <div class="resultsList"> <h1>PEEM Results List</h1> <a class="exportCSV" href="htt
<div class="resultsList">
<h1>PEEM Results List</h1>
<a class="exportCSV" href="https://domain.com/downloadcsv.php">Export to CSV</a>
<!-- Export CSV button -->
<h3 class="resultsbydate">All results by date</h3>
<div class="resultsListHeader">
<div class="clientidTab">Agency</div>
<div class="clientidTab">Family ID</div>
<div class="clientidName">Name</div>
<div class="clientidTab">Date</div>
<div class="clientidTab"></div>
</div>
<div class="entriesListMain">
<?php
$connection = mysql_connect("localhost", "username", "password"); // Establishing Connection with Server
$db = mysql_select_db("database_name", $connection); // Selecting Database
//MySQL Query to read data
$query = mysql_query("select * from results ORDER BY peemdate DESC", $connection);
while ($row = mysql_fetch_array($query)) {
echo "<div><input type=\"checkbox\" name=\"xport\" value=\"export\"><span>{$row['client_id']}</span> <span>{$row['family_id']}</span> <span>{$row['firstname']} {$row['lastname']}</span> <span>".date("d F Y", strtotime($row['peemdate']))."</span>";
echo "<span><a class=\"parents-button\" href=\"peem-parent-repsonses.php?id={$row['survey_id']}\"><strong>Parent’s Review</strong></a></span>";
echo "<span><a href=\"peem-repsonses.php?id={$row['survey_id']}\"><strong>View Results</strong></a></span>";
echo "</div>";
}
?>
</div>
</div>
<?php
if (isset($_GET['id'])) {
$id = $_GET['id'];
$query1 = mysql_query("select * from results where survey_id=$id", $connection);
while ($row1 = mysql_fetch_array($query1)) {
?>
<?php
}
}
?>
<?php
mysql_close($connection); // Closing Connection with Server
?>
下载csv.php
<?php
$conn = mysql_connect("localhost","username","password");
mysql_select_db("databasename",$conn);
$filename = "peem_results.csv";
$fp = fopen('php://output', 'w');
$query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='realwell_peemfinal' AND TABLE_NAME='results'";
$result = mysql_query($query);
while ($row = mysql_fetch_row($result)) {
$header[] = $row[0];
}
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
fputcsv($fp, $header);
$query = "SELECT * FROM results";
$result = mysql_query($query);
while($row = mysql_fetch_row($result)) {
fputcsv($fp, $row);
}
exit;
?>
这方面的任何帮助都会很好,干杯
更新了我试图实现的目标的屏幕截图
因此,如果我理解正确,您只需选中复选框,选择要插入csv文件的数据库$行即可 选中的每个复选框都将位于$\u POST变量中,因此: 例如,首先,使用复选框选项数据库的所有名称创建一个数组
$all_db = ['database1', 'database2', 'database3'];
第二,循环遍历$all_db中的每个值,检查它们是否存在于$_POST数组中,如果存在,则可以导出该行
foreach( $all_db as $db_check ) {
if ( array_key_exists( $db_check, $_POST ) {
// EXPORT TO CSV
}
}
别忘了!这意味着复选框的name属性应该是数据库的名称
如果您不希望有一个静态数据库列表,即未来可能有不同名称的数据库/数据库的数量可能会增加或减少,请告诉我,如果需要,我可以编辑我的答案:
如果使用$\u GET变量,则可以执行相同的操作,只需将$\u POST更改为$\u GET即可
要知道,如果最终用户的URL中有1000个变量,那么$\u GET对他来说有点业余
$\u POST通常是更好的选择,因为它对最终用户来说是隐藏的和更干净的
编辑:更新答案请参见注释
所以基本上你需要人们能够选择他们从你的数据库中导出什么行。。。
首先,这意味着每一行都需要一个唯一的ID
这可以是仅用于该列的列,即具有自动递增和唯一属性的ID列
或者这可能是您已经拥有的列,只需确保它是唯一的列,这样我们就不会得到重复值,您将看到下面的原因
然后我们将这个惟一ID列的值赋给复选框的name属性,并使用jquery/php追加/前置一个静态字符串
例如,使用您的家庭ID:
行号u+$family_ID
这让我们再次使用您的示例:
$\u POST[]=['rownumber\u 123456'=>1,'rownumber\u0000000'=>1,…]
因此,在PHP文件中,只需执行以下操作即可将正确的行添加到CSV中:
while($row = mysql_fetch_row($result)) {
if ( array_key_exists($row['your_row_id'], $_POST) {
fputcsv($fp, $row);
}
}
-再次使用您的带有族ID的示例:-
while($row = mysql_fetch_row($result)) {
if ( array_key_exists($row['family_ID'], $_POST) {
fputcsv($fp, $row);
}
}
编辑:更新第2条评论的答案
如果您打算使用php循环浏览html,那么就不必多加说明了
i、 e.循环trhough db行并以有序的方式打印它们
然后你可能想使用:循环的变体
而:
用于:
foreach:
如果:
.....
这些变体允许yu在:之后关闭php标记,并且您在条件/循环中输入的html/css/php/jquery将像正常一样执行
例如,您可以执行以下操作:
<ul>
<?php foreach ($row as $columnkey => $columnvalue): ?>
<img src="whateveryouwant"?>
<li class="<?php echo $columnkey;?>">This is my value: <?php echo $columnvalue; ?></li>
<?php endforeach; ?>
</ul>
现在,它将检查每一行SQL行的族ID是否在$\u POST变量checkbooxes中作为所需行发布,如果不是,则不会将该行导出到csv文件中!:
好了^^
编辑3:故障排除
所以在这个函数中有两件事要做,
形式,,
html表单中的复选框是否在其名称属性中包含family_ID?
i、 e.初始结果集需要包装成一个表单,然后发布到下一页。 复选框必须向导出脚本发送ID数组
<input type='checkbox' name='xport[]' value='ID_OF_THE_ROW_HERE'>
将$row['client_id']更改为正确的值
然后在导出脚本中:
<?php
/*
Expecting $_POST['xport'] array of row ids
*/
if( !isset($_POST['xport']) OR !is_array($_POST['xport']) ) {
exit('No rows selected for export');
}
$conn = mysql_connect("localhost","username","password");
mysql_select_db("databasename",$conn);
$filename = "peem_results.csv";
$fp = fopen('php://output', 'w');
$query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='realwell_peemfinal' AND TABLE_NAME='results'";
$result = mysql_query($query);
while ($row = mysql_fetch_row($result)) {
$header[] = $row[0];
}
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
fputcsv($fp, $header);
//Cast all ids to integer
$ids = $_POST['xport'];
array_walk($ids, function(&$value, $key) {
$value = (int)$value;
});
$ids = implode(', ', $ids);
$query = "SELECT * FROM results WHERE id IN ($ids)";
$result = mysql_query($query);
while($row = mysql_fetch_row($result)) {
fputcsv($fp, $row);
}
exit;
?>
这应该是“复选框”选择,而不是“检查bx”。你好@Rafael Lambelin,谢谢你的回复。是的,你是在正确的轨道上,但它只是从1数据库。我只需要被允许选择数据库中需要导出的条目,但在重新编写代码以实现这一点时遇到困难。感谢更新,您的答案很好,但我的php技能相当弱,我不知道如何实现这一点。干杯你能告诉我你不能实现哪一部分吗?标签之间的所有东西lol。我的技能更前端,所以我不擅长编写php。我更像是一个复制粘贴的例子,并根据我的需要进行更改。我以同样的方式开始:首先,所有东西都应该发布,只需根据您的需要更改设置,即ID、类、sql主机等
<input type='checkbox' name='xport[]' value='ID_OF_THE_ROW_HERE'>
SELECT * FROM results WHERE id IN (4,7,11,30)
<form method="POST" action="downloadcsv.php">
<h1>PEEM Results List</h1>
<a class="exportCSV" href="https://domain.com/downloadcsv.php">Export to CSV</a>
<!-- Export CSV button -->
<h3 class="resultsbydate">All results by date</h3>
<div class="resultsListHeader">
<div class="clientidTab">Agency</div>
<div class="clientidTab">Family ID</div>
<div class="clientidName">Name</div>
<div class="clientidTab">Date</div>
<div class="clientidTab"></div>
</div>
<div class="entriesListMain">
<?php
$connection = mysql_connect("localhost", "username", "password"); // Establishing Connection with Server
$db = mysql_select_db("database_name", $connection); // Selecting Database
//MySQL Query to read data
$query = mysql_query("select * from results ORDER BY peemdate DESC", $connection);
while ($row = mysql_fetch_array($query)) {
echo "<div><input type='checkbox' name='xport[]' value='{$row['client_id']}'><span>{$row['client_id']}</span> <span>{$row['family_id']}</span> <span>{$row['firstname']} {$row['lastname']}</span> <span>".date("d F Y", strtotime($row['peemdate']))."</span>";
echo "<span><a class=\"parents-button\" href=\"peem-parent-repsonses.php?id={$row['survey_id']}\"><strong>Parent’s Review</strong></a></span>";
echo "<span><a href=\"peem-repsonses.php?id={$row['survey_id']}\"><strong>View Results</strong></a></span>";
echo "</div>";
}
?>
</div>
</form>
<?php
/*
Expecting $_POST['xport'] array of row ids
*/
if( !isset($_POST['xport']) OR !is_array($_POST['xport']) ) {
exit('No rows selected for export');
}
$conn = mysql_connect("localhost","username","password");
mysql_select_db("databasename",$conn);
$filename = "peem_results.csv";
$fp = fopen('php://output', 'w');
$query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='realwell_peemfinal' AND TABLE_NAME='results'";
$result = mysql_query($query);
while ($row = mysql_fetch_row($result)) {
$header[] = $row[0];
}
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
fputcsv($fp, $header);
//Cast all ids to integer
$ids = $_POST['xport'];
array_walk($ids, function(&$value, $key) {
$value = (int)$value;
});
$ids = implode(', ', $ids);
$query = "SELECT * FROM results WHERE id IN ($ids)";
$result = mysql_query($query);
while($row = mysql_fetch_row($result)) {
fputcsv($fp, $row);
}
exit;
?>