【问题标题】:Problems by trying to convert HTML Table to CSV in MODx Revolution尝试在 MODx 革命中将 HTML 表转换为 CSV 的问题
【发布时间】:2014-05-12 20:49:43
【问题描述】:

我正在使用以下解决方案将 HTML 表格转换为 CSV:Converting HTML Table to a CSV automatically using PHP?,当我在服务器中单独使用两个文件时它可以正常工作。

这里可以看到我的代码的改编:

文件 01:TABLE.PHP

<?php
    session_start();
    $query_select = 'SELECT id, name, department, year FROM table WHERE year = 2000 ORDER BY name DESC';
    $query_result = mysqli_query($link, $query_select) or die ("Couldn't execute query: ".mysqli_error());

    $table = '
        <table id="result-table" class="table table-bordered table-hover">
            <thead>
                <tr>
                    <td>ID</td>
                    <td>NAME</td>
                    <td>DEPARTMENT</td>
                    <td>YEAR</td>
                    <td>Check</td>
                </tr>
            </thead>';
    while($row = mysqli_fetch_array($query_result)) {
        $table .= "
            <tbody>
                <tr>
                    "<td>".$row['id']."</td>".
                    "<td>".$row['name']."</td>".
                    "<td>".$row['department']."</td>".
                    "<td>".$row['year']."</td>".
                    "<td><input type='checkbox' name=".$row['id']." value=".$row['id']."></td>".
                </tr>";
    }
    $table .= '
            </tbody>
        </table>';

    $_SESSION['table'] = $table;
    echo $table;
    echo '<a href=html2csv.php>Export to CSV</a>';
?>

文件 02:HTML2CSV.php

<?php

session_start();
include 'simple_html_dom.php'; // Which is in http://www.example.com/simple_html.php as well.
$table = $_SESSION['table'];
$html = str_get_html($table);


header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename=file.csv');

$fp = fopen("php://output", "w");

foreach($html->find('tr') as $element) {
    $td = array();
    foreach($element->find('th') as $row) {
        $td [] = $row->plaintext;
    }
    fputcsv($fp, $td);

    $td = array();
    foreach( $element->find('td') as $row) {
        $td [] = $row->plaintext;
    }
    fputcsv($fp, $td);
}
fclose($fp);
?>

正如我在上面所说的,这些文件一起提供了我期望的结果:一个漂亮的 CSV 文件。 (: 当我尝试使其适应 MODx 革命时,就会出现问题。我就是这样做的:

在 MODx Revolution 我有一个名为 Result Table 的资源,它有一个 sn-p [[resultTable]] 和一个指向文件 html2csv.php 的链接。这里是资源的来源:

<p>[[!resultTable]]</p>
<p><a href="http://example.com/html2csv.php">Export to CSV</a></p>

这里是 sn-p 结果表:

<?php
    $query_select = 'SELECT id, name, department, year FROM table WHERE year = 2000 ORDER BY name DESC';
    $query_result = mysqli_query($link, $query_select) or die ("Couldn't execute query: ".mysqli_error());

    $table = '
        <table id="result-table" class="table table-bordered table-hover">
            <thead>
                <tr>
                    <td>ID</td>
                    <td>NAME</td>
                    <td>DEPARTMENT</td>
                    <td>YEAR</td>
                    <td>Check</td>
                </tr>
            </thead>';
    while($row = mysqli_fetch_array($query_result)) {
        $table .= "
            <tbody>
                <tr>
                    "<td>".$row['id']."</td>".
                    "<td>".$row['name']."</td>".
                    "<td>".$row['department']."</td>".
                    "<td>".$row['year']."</td>".
                    "<td><input type='checkbox' name=".$row['id']." value=".$row['id']."></td>".
                </tr>";
    }
    $table .= '
            </tbody>
        </table>';

    $_SESSION['table'] = $table;
    return $table;
?>

正如 MODx 教程所建议的那样,唯一重要的修改是在我没有使用 echo 而是返回的最后几行。直到这里它也能正常工作,我可以看到结果表。当我单击加载文件 html2csv.php 的链接时,我可以下载 csv 文件,但不幸的是它有以下错误消息:

<b>Fatal error</b>:  Call to a member function find() on a non-object in <b>/home/aloysia/www/html2csv.php</b> on line <b>13</b><br />

我尝试了一些解决方法,但都没有奏效。所以我希望有人能再次帮助我并解释我做错了什么。 (:

非常感谢!

【问题讨论】:

    标签: php html csv modx-revolution


    【解决方案1】:

    问题可能是您的$_SESSION['table'] 未设置。当 modx 运行时,它会启动它自己的会话,您无法从外部自动访问该会话。您可以通过 html2csv.php 中的var_dump($_SESSION) 快速测试它。我不太确定您的整体解决方案,为什么不直接从数据库生成 CSV?但是,如果您无法更改解决方案,我会尝试包含 modx 的 index.php 并设置 MODX_API_MODE = true 以在不加载请求的情况下访问函数。 (假设你在某个地方的同一个网络根目录下!)

    //In html2csv.php
    define('MODX_API_MODE', true);
    require_once('..path/to/index.php');
    
    //You should now be able to access $_SESSION['table']
    var_dump($_SESSION['table']);
    

    【讨论】:

    • 感谢您的回答@Kristian!不幸的是,它没有用。但我现在遵循直接从 mysql 选择创建 csv 的建议。我非常接近解决方案,但仍然遇到一些错误。也许你可以帮助我走得更远。这里是新话题:stackoverflow.com/questions/23642362/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多