首页 > 解决方案 > mpdf 使用 while 打印包含内部和外部数据的表格

问题描述

我有一个要打印的 pdf 文档,一切正常,直到我需要数据库中的一些数据出现在 while 循环之外。

这是我使用的代码:

    <?php

session_start();
$role = $_SESSION['userrole'];
if(!isset($_SESSION['useruid']) || $role!="administrator"){
  header('Location: login.php?error=wrongrole');
}

if(!isset($_SESSION['useruid']) && $role!="tutor") {
  header('location: login.php?error=wrongrole');
}

require_once ('../vendor/autoload.php');
require_once ('dbh.inc.php');

$ids =  explode(',', $_GET['report-id']);

$query_params = [];
$bind_params = '';

foreach($ids as $id){
    $query_params[] = '?';
    $bind_params .= 'i';
}

$stmt = $conn->prepare("SELECT * from planning 
                        INNER JOIN classes on classes.classesClass = planning.planningClass
                        WHERE planningId IN(" . implode(',', $query_params) . ")");
$stmt->bind_param($bind_params, ...$ids);
$stmt->execute();
$result = $stmt->get_result();

$mpdf = new \Mpdf\Mpdf(['tempDir' => '/tmp']);

$html = '
<img src="../img/ue-logo.jpg" height="60" width="auto" />
<img style="padding-left: 32%;" src="../img/gr-logo.jpg" height="60" width="auto" />
<img style="padding-left: 32%;" src="../img/is-logo.jpg" height="60" width="auto" />

<br /><br />

<p style="text-align: right; padding-right: 5%;"><strong>ANEXA 4</strong></p>

<br />

<p style="text-align: left;"><strong>
  id 130788<br />
  "Proiect “Stagii de practică pentru elevii din învățământul tehnic – calificări în servicii”, cod SMIS 130788"<br />
  Centralizator activitati stagii de practica luna $MONTH
</strong></p>

<h3 style="text-align: center;">PLANIFICAREA TEMATICA LUNA $MONTH </h3>

<br/>

<table style="border:1px solid black; width:100%; border-collapse: collapse; text-align: center;">
  <tr style="border:1px solid black;">
    <th style="border:1px solid black;">Clasa</th>
    <th style="border:1px solid black;">Domeniu/Sc Profesioanala/Liceu</th>
    <th style="border:1px solid black;">Saptamana</th>
    <th style="border:1px solid black;">Ora start - Ora terminare</th>
    <th style="border:1px solid black;">Angajator</th>
  </tr>
';

while ($row = $result->fetch_assoc()) {
  $html .= '
    <tr>
      <td style="border:1px solid black;">' . $row['planningClass'] . '</td>
      <td style="border:1px solid black;">' . $row['classesQualification'] . '</td>
      <td style="border:1px solid black;">' . $row['planningWeek'] .'</td>
      <td style="border:1px solid black;">' . $row['planningHourStart'] . ' - ' . $row['planningHourEnd'] . '</td>
      <td style="border:1px solid black;">' . $row['planningCompany'] .'</td>
    </tr>';
}

$html .= '</table>';

$mpdf->AddPage('L');
$mpdf->WriteHTML($html);


$mpdf->Output();

问题是我需要在初始化 while 循环之前出现数据库中的月份。我怎样才能做到这一点?有简单的方法吗?我已将 $MONTH 放在我希望循环中的数据所在的位置。

标签: phpmpdf

解决方案


知道了。为此,我需要首先从结果集中获取所有数据。可以对多行​​使用 fetch_all(),否则可以使用 fetch_array() 进行优化。

然后需要访问索引 0 处的行及其键以从所需列中获取值。如果没有行或列不是 SQL 的一部分,则默认值可以是空字符串。


推荐阅读