从 MySQL 生成表到 PDF(使用 PHP)
Posted
技术标签:
【中文标题】从 MySQL 生成表到 PDF(使用 PHP)【英文标题】:Generate table from MySQL to PDF (using PHP) 【发布时间】:2016-11-25 08:45:54 【问题描述】:我正在尝试将表(已过滤)从 mysql 导出为 pdf。
这里的主要问题是它只打印列表中的最后一个结果,而不是打印所有结果。
我尝试了其他代码,但仍然得到相同的结果。我不知道我的代码有什么问题:
<?php
include("configsample.php");
?>
<?php
$string=$_GET['string'];
$course=$_GET['course'];
$category=$_GET['category'];
$from=$_GET['from'];
$to=$_GET['to'];
if ($_REQUEST["string"]<>'')
$search_string = " AND restu_title LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%'";
if ($_REQUEST["course"]<>'')
$search_course = " AND restu_course='".mysql_real_escape_string($_REQUEST["course"])."'";
if ($_REQUEST["category"]<>'')
$search_category = " AND category='".mysql_real_escape_string($_REQUEST["category"])."'";
if ($_REQUEST["from"]<>'' and $_REQUEST["to"]<>'')
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year BETWEEN '".mysql_real_escape_string($_REQUEST["from"])."' AND '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course;
else if ($_REQUEST["from"]<>'')
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["from"])."'".$search_string.$search_course;
else if ($_REQUEST["to"]<>'')
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course;
else
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_id>0".$search_string.$search_course.$search_category;
$html='<table>
<tr style="color:#010101; font:bold 13px Times New Roman; height:40px;">
<th>Research Title</th>
<th>Year</th>
<th>Proponent(s)</th>
<th>Adviser</th>
<th>Research Panel</th>
</tr>';
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
if (mysql_num_rows($sql_result)>0)
while ($row = mysql_fetch_assoc($sql_result))
$html2='<tr>
<td style="padding:10px;">'.$row['restu_title'].'</td>
<td style="padding:10px;">'.$row['restu_year'].'</td>
<td style="padding:10px;">'.$row['restu_by'].'</td>
<td style="padding:10px;">'.$row['restu_ad'].'</td>
<td style="padding:10px;">'.$row['restu_panel'].'</td>
</tr>
</table>';
include("mpdf60/mpdf.php");
$mpdf=new mPDF('c','Letter','','',20,20,18,16,9,9,'L');
$mpdf->SetDisplayMode('fullpage');
$mpdf->AddPage('L');
$mpdf->WriteHTML($html);
$mpdf->WriteHTML($html2);
$mpdf->Output();
exit;
?>
【问题讨论】:
您在 whileloop 中覆盖了 $html2。只要有另一条记录,它就会被提取,html2 将始终包含最后一条记录的值。 【参考方案1】:您需要concatenate 您的文本字符串以避免$html2
被下一个值覆盖。
每次循环运行时,$html2
都会被新值覆盖。在您的情况下,您需要在等号之前添加一个点:
while ($row = mysql_fetch_assoc($sql_result))
$html .='<tr>
<td style="padding:10px;">'.$row['restu_title'].'</td>
<td style="padding:10px;">'.$row['restu_year'].'</td>
<td style="padding:10px;">'.$row['restu_by'].'</td>
<td style="padding:10px;">'.$row['restu_ad'].'</td>
<td style="padding:10px;">'.$row['restu_panel'].'</td>
</tr>';
注意正确放置</table>
。如果您的 SQL 请求没有结果,则不会关闭表,导致 HTML 无效。
你需要这样做:
$html='<table>
<tr style="color:#010101; font:bold 13px Times New Roman; height:40px;">
<th>Research Title</th>
<th>Year</th>
<th>Proponent(s)</th>
<th>Adviser</th>
<th>Research Panel</th>
</tr>';
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
if (mysql_num_rows($sql_result)>0)
while ($row = mysql_fetch_assoc($sql_result))
$html .='<tr>
<td style="padding:10px;">'.$row['restu_title'].'</td>
<td style="padding:10px;">'.$row['restu_year'].'</td>
<td style="padding:10px;">'.$row['restu_by'].'</td>
<td style="padding:10px;">'.$row['restu_ad'].'</td>
<td style="padding:10px;">'.$row['restu_panel'].'</td>
</tr>';
$html .= '</table>';
【讨论】:
感谢您的建议。我尝试替换代码,但它给了我这个错误:“mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件: 当您在 $mpdf-> 之前有 var_dump 或任何错误时会出现此消息。尝试 var_dump($html) 不做 pdf 看是否有错误,关于 de sql 请求。【参考方案2】:附加 $html2。您正在循环中分配值,因此它只显示最后一条记录。
这样使用..
$html2=$html2.'<tr>
<td style="padding:10px;">'.$row['restu_title'].'</td>
<td style="padding:10px;">'.$row['restu_year'].'</td>
<td style="padding:10px;">'.$row['restu_by'].'</td>
<td style="padding:10px;">'.$row['restu_ad'].'</td>
<td style="padding:10px;">'.$row['restu_panel'].'</td>
</tr>';
【讨论】:
感谢您的建议。我尝试替换代码,但它给了我这个错误:“mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件:以上是关于从 MySQL 生成表到 PDF(使用 PHP)的主要内容,如果未能解决你的问题,请参考以下文章