Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
通过选中复选框,通过PHP将MySQL表导出到CSV_Php_Mysql_Csv_Export To Csv - Fatal编程技术网

通过选中复选框,通过PHP将MySQL表导出到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

我需要在PHP页面上显示调查结果列表,然后将其导出到CSV文件。该列表还可以作为一个摘要,单击该摘要可获得完整的结果

我有所有的排序,但现在我需要有一个检查bx选择CSV导出,这样我们就不需要下载整个数据库,每次只是我们需要的

我的代码如下

<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&rsquo;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&rsquo;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;
?>