【问题标题】:Exporting table to CSV via php button通过 php 按钮将表格导出为 CSV
【发布时间】:2014-03-22 08:21:11
【问题描述】:

我对 php 很陌生,我学到的一切都来自我的学校教科书和在线研究。话虽如此,我正在努力完成一项任务,但我被困在最后一部分。对于作业的最后一部分,“创建一个 PHP 脚本,该脚本将把员工表的内容转储到 CSV 文本文件中,每个记录都有逗号分隔的值。每条新记录都应该从新行开始”强>。我尝试了许多在线教程,但没有一个教如何将此事件放入按钮中。我包括我的代码,所以你可以看到我的混乱。这还不错,但我确信我可以用更少的代码完成同样的任务。同样,我才刚刚开始,这是我现在能做的最好的事情。任何人都可以就如何做到这一点提出任何建议。我在第 140 行有我的按钮。我还使用了一个 db_connect() 函数,所以我不必多次编写它。我可以在保存为 csv 之前使用它来读取数据库。

任何建议将不胜感激。被警告有很多代码要遵循。

    <h2>Employee Search</h2>
    <form action="Draft.php" name="dbToCSV" method="GET">
        <input type="submit" name="dbToCSV" value="Export Database to CSV" <?php if     (isset($_GET['dbToCSV']))
                    {
                        //Do this code
                    }
                    else
                    {
                        echo "Error!";
                    } ?>><br />

    </form>
    <form action="Draft.php" method="GET">
        By name: <input type="text" name="searchName">
        <input type="submit" value="Search Name"><br />
    </form>
    <form action="Draft.php" method="GET">
        By language: <input type="text" name="searchLang">
        <input type="submit" value="Search Language"><br />
    </form>

【问题讨论】:

  • 请将代码简化为您问题的相关部分。发布的代码包含许多与您的问题没有直接关系的其他内容。
  • 我会小心的,考虑到这是你期末考试的一部分。你可能永远不知道谁看到了这个,只是一个建议。

标签: php mysql csv


【解决方案1】:

现在是 2017 年,mysqli 现在比 mysql 更常见。所以这里是 Josh Liptzin 的答案的 mysqli 版本:

<?php

/* Attempt MySQL server connection. */  
$connection = mysqli_connect($database_server, $database_username, $database_password, $database_name);

// Check connection
if($connection === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$query = "SELECT * FROM Employee_data";
$result = mysqli_query($connection, $query);

$number_of_fields = mysqli_num_fields($result);
$headers = array();
for ($i = 0; $i < $number_of_fields; $i++) {
    $headers[] = mysqli_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="export.csv"');
    header('Pragma: no-cache');
    header('Expires: 0');
    fputcsv($fp, $headers);
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    die;
}

function mysqli_field_name($result, $field_offset)
{
    $properties = mysqli_fetch_field_direct($result, $field_offset);
    return is_object($properties) ? $properties->name : null;
}

?>

【讨论】:

    【解决方案2】:

    您实际上是在尝试将 PHP 代码放入 HTML 按钮中。该按钮可以简单地是指向另一个页面的链接(如 dump.php),其中包含一些 PHP,如下所示:

    链接:

    <a href="dump.php" target="_blank">Download employee data</a>
    

    转储.php:

    <?php
    
    $result = mysql_query('SELECT * FROM `employee_data`');
    if (!$result) die('Couldn\'t fetch records');
    $num_fields = mysql_num_fields($result);
    $headers = array();
    for ($i = 0; $i < $num_fields; $i++) {
        $headers[] = mysql_field_name($result , $i);
    }
    $fp = fopen('php://output', 'w');
    if ($fp && $result) {
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename="export.csv"');
        header('Pragma: no-cache');
        header('Expires: 0');
        fputcsv($fp, $headers);
        while ($row = $result->fetch_array(MYSQLI_NUM)) {
            fputcsv($fp, array_values($row));
        }
        die;
    }
    
    ?>
    

    代码来源:PHP code to convert a MySQL query to CSV

    为了您自己的利益,您不应该将上面的代码复制并粘贴到您的作业中 - 您发布的代码和上面的代码之间存在天壤之别,评分者会立即接受。

    【讨论】:

    • 感谢您的帮助。我确实有自己加载的代码,它可以很好地完成任务。我现在正在弄清楚如何使用按钮调用该代码,但将代码与其余部分一样保留在同一站点中。我知道这对于一个简单的网站来说有点多,但我试图在一个 php 页面上完成所有这些工作。根据你的建议,我应该在一段时间内完成一些工作。完成后我会重新发布我的发现。
    【解决方案3】:

    所以课程结束了,我想我会展示我是如何解决我的问题的。这对我来说最有意义,并且不需要很多代码行。我确信可能有更短的方法可以做到这一点,但对于 php 来说我还是很陌生,我在代码上做得很好。

    我基本上做了一个 if 语句来检查数据库中是否有任何记录,然后它获取每个记录字段并将其写入 cdv 文件,同时添加一个逗号。我做了两次这个代码。顶部代码写入数据库字段名称,后半部分写入这些字段中的值。谢谢大家的建议。我很高兴我能够及时解决问题并提交我的作业。

    if (isset($_GET['dbToCSV']))
    {
        // database connection
        db_connect();
    
        $query = mysql_query("SELECT * FROM employee_data") or die(mysql_error());
        $number_rows = mysql_num_rows($query);
    
        if ($number_rows >= 1)
        {
            $filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; // filenme with date appended
            $fp = fopen($filename, "w"); // open file
    
            $row = mysql_fetch_assoc($query);
    
            $seperator = "";
            $comma = "";
    
            foreach ($row as $name => $value)
            {
                $seperator .= $comma . $name; // write first value without a comma
                $comma = ","; // add comma in front of each following value
            }
            $seperator .= "\n";
    
            echo "Database has been exported to $filename";
    
            fputs($fp, $seperator);
    
            mysql_data_seek($query, 0); // use previous query leaving out first row
    
            while($row = mysql_fetch_assoc($query))
            {
                $seperator = "";
                $comma = "";
    
                foreach ($row as $name => $value)
                {
                    $seperator .= $comma . $value; // write first value without a comma
                    $comma = ","; // add comma in front of each following value 
                }
    
                $seperator .= "\n";
    
                fputs($fp, $seperator);
            } 
    
            fclose($fp);
    
        }
        else
            echo "There are no records in the database to export.";
    
        mysql_close();   
    }
    

    【讨论】:

      【解决方案4】:

      以下是我正在使用的 PHP 脚本。

      <?php
      
      $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
      if (!$link) {
          die('Could not connect: ' . mysql_error());
      }
      
      $table_name = "employees";
      
      $fp = fopen('php://output', 'w');
      header('Content-Type: text/csv');
      header('Content-Disposition: attachment; filename="'.$table_name.'.csv"');
      header('Pragma: no-cache');
      header('Expires: 0');
      
      $result = mysql_query("SELECT * FROM $table_name");
      if (!$result) die("Couldn't fetch records");
      $num_fields = mysql_num_fields($result);
      $headers = array();
      for ($i = 0; $i < $num_fields; $i++) {
          $headers[] = mysql_field_name($result , $i);
      }
      
      if ($fp && $result) {
          fputcsv($fp, $headers);
          while ($row = mysql_fetch_assoc($result)) {
              fputcsv($fp, $row);
          }
      }
      
      exit;
      ?>
      

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        • 2012-05-08
        相关资源
        最近更新 更多