【问题标题】:How to retrieve data from database to display it in csv format on a webpage?如何从数据库中检索数据以在网页上以 csv 格式显示?
【发布时间】:2016-07-19 16:00:36
【问题描述】:

其实我想在网页上显示 csv 格式的数据。数据存储在数据库的消息字段中。 数据是:

data    count 
120     80
140     50
170     100
150     70
180     120

我想以逗号分隔的 csv 格式在网页上显示这些数据,例如: data , count 。 我在其他网站上找到了这段代码,但不是在网页上显示数据,而是在文件夹中生成 csv 文件并将数据存储在其中。 这是代码:

// open connection to mysql database   
$connection = mysqli_connect($host, $username, $password, $dbname) or 
die("Connection Error " . mysqli_error($connection));

// fetch mysql table rows   
$sql = "select message from wholesaler";

$result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));

$fp = fopen('books.csv', 'w');
while($row = mysqli_fetch_assoc($result)) {
    fputcsv($fp, $row);
}    
fclose($fp);

//close the db connection    
mysqli_close($connection);

谁能告诉我解决的步骤?

【问题讨论】:

  • 什么是逗号分隔数据行或单个数字。如果您能提供一个有用的示例输出。
  • 将此代码 $fp = fopen('books.csv', 'w'); while($row = mysqli_fetch_assoc($result)) { fputcsv($fp, $row); } fclose($fp); 替换为此 $data = []; while($row = mysqli_fetch_assoc($result)) { $data[] = $row; } var_dump($data); 并将 var_dump 输出添加到评论或问题中。
  • 输出以数组形式出现。这里是输出:array(1) { [0]=> array(1) { ["content"]=> string(47) "数据计数 120 80 140 50 170 100 150 70 180 120" } }

标签: php mysql csv


【解决方案1】:

您提供的代码使用循环将数据保存到 CSV 文件中。因为您不需要将其保存在文件中,所以您必须用输出中的一些代码打印行替换此循环。

根据你的代码你需要替换这部分

$fp = fopen('books.csv', 'w');

while($row = mysqli_fetch_assoc($result))
{
    fputcsv($fp, $row);
}

例如这个

while($row = mysqli_fetch_assoc($result)) { 
    //we need to split your message into array
    $csvRows = explode("\n", $row['message']);

    $head = [];
    if (array_key_exists(0, $csvRows)) {
        $head = explode(' ', trim($csvRows[0]));
    }

    $data = [];
    for ($i = 1; $i < count($csvRows); $i++) {
        $data[] = explode(' ', trim($csvRows[$i]));
    }

    //print recognized headers
    echo '<table width="100%"><tr>';
    foreach ($head as $h) {
        echo "<th>{$h}</th>";
    }
    echo '</tr>';

    //print your csv row as table row
    foreach ($data as $r) {
        echo '<tr>';
        foreach ($r as $v) {
            echo "<td>{$v}</td>";
        }
        echo '</tr>';
    }
    echo '<table>';
}

【讨论】:

  • 它正在工作。你能告诉我如何以列格式打印数据吗?像这样:数据计数 120 80 140 50 170 100 150 70 180 120
  • 我通过添加表格代码更改了我的答案。这段代码非常简单 - 它不会检查每一行是否有相同数量的列并显示非常简单的表格,但您可以将其用作解决方案的基础。
  • w3schools.com/html/tryit.asp?filename=tryhtml_table .... 我想要这样的表。我试过你上面的代码,但我没有得到这种输出。你能帮帮我吗?
  • 我已经改变了我的答案。您需要将列名(如我的示例中的第 1 列)更改为您的名称。
  • 但是列名是数据和计数,它们对应的值是 120 80 等等。它们作为原始数据存储在数据库的消息字段中。所以我想显示一个这样的表格:数据计数及其对应的值。
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多