【问题标题】:How to calculate the SUM of rows values for one column of a table created using TCPDF?如何计算使用 TCPDF 创建的表的一列的行值总和?
【发布时间】:2020-02-14 10:10:36
【问题描述】:

请您帮我计算并显示我的表中名为“prime”的列的行的总和值,该表是使用 TCPF在 PDF 报告中创建的>(正在从我的数据库中提取数据)。 先感谢您。如果您能帮助我,我将不胜感激。 A better description of my result table in this link 我的代码的主要部分是这样的:

    <?php
set_time_limit(0);
tcpdf();


 // create new PDF document
$pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// set default monospaced font
//$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
//$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language dependent data:
$lg = Array();
$lg['a_meta_charset'] = 'UTF-8';
$lg['a_meta_dir'] = 'rtl';
$lg['a_meta_language'] = 'fa';
$lg['w_page'] = 'page';

// set some language-dependent strings (optional)
$pdf->setLanguageArray($lg);

// ---------------------------------------------------------



// add a page
$pdf->AddPage();


$pdf->SetXY(16, 10);


// set document information
$pdf->SetCreator(PDF_CREATOR);
//$pdf->SetAuthor('Nicola Asuni');
//$pdf->SetSubject('TCPDF Tutorial');
//$pdf->SetKeywords('TCPDF, PDF, example, navettes, guide');
// set default header data
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.'', PDF_HEADER_STRING);
 $pdf->setPrintHeader(false);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));



$pdf->setRTL(true);

$pdf->SetFont('xzar', '', 10);

    $sql= "SELECT * FROM nav_agent WHERE matricule='$mat'";  
    $query = $this->db->query($sql); 


$saut=0;
$tbl = '<table cellspacing="0" cellpadding="1" border="1">
   <thead>
        <tr>
            <th style="border: 1px double #000000; text-align:center;"  colspan="2">الإذن </th>
            <th style="border: 1px double #000000; text-align:center;"  colspan="2">التنقل</th>
            <th style="border: 1px double #000000; text-align:center;"  colspan="2">التوقيت</th>
            <th style="border: 1px double #000000; text-align:center;"  colspan="4"> </th>
       </tr>


<tr>
<td style="border: 1px double #000000; text-align:center;">العدد</td>  
<td style="border: 1px double #000000; text-align:center;">التاريخ</td>  
<td style="border: 1px double #000000; text-align:center;">من</td>  
<td style="border: 1px double #000000; text-align:center;">إلى</td>  
<td style="border: 1px double #000000; text-align:center;">الإنطلاق</td>  
<td style="border: 1px double #000000; text-align:center;">الرجوع</td>  
<td style="border: 1px double #000000; text-align:center;">المدة المقضاة (بالساعة)</td>  
<td style="border: 1px double #000000; text-align:center;"> مبلغ منحة التنقل </td> 
<td style="border: 1px double #000000; text-align:center;">رقم السيارة</td>
</tr>
';

$prime=0;
foreach ($query->result() as $row){

 $sql1 = "SELECT * FROM fiche_nav WHERE id_navette='$row->id_navette'";  


  $query1 = $this->db->query($sql1);    
foreach ($query1->result() as $row1){


$delai = strtotime($row1->heureret) - strtotime($row1->heuredep); 
$time_h = ($delai/60)/60; 


if ($val_grade == 'A1' or   $val_grade == 'A2')
    $montant1 = 15.000;
    else
        if ($val_grade == 'A3' or   $val_grade == 'B'  
         or     $val_grade =='ouv cat 8' or $val_grade =='ouv cat 9' or $val_grade =='ouv cat 10')  


    $montant1 = 9.000;
    else
        if ($val_grade == 'C' or    $val_grade == 'D'  
         or     $val_grade =='ouv cat 1' or $val_grade =='ouv cat 2' or $val_grade =='ouv cat 3'    
         or $val_grade =='ouv cat 4' or $val_grade =='ouv cat 5' or $val_grade =='ouv cat 6' or $val_grade =='ouv cat 7')

    $montant1 = 6.750;   


if ($val_grade == 'A1' or   $val_grade == 'A2')
    $montant2 = 35.000;
    else
        if ($val_grade == 'A3' or   $val_grade == 'B'  
         or     $val_grade =='ouv cat 8' or $val_grade =='ouv cat 9' or $val_grade =='ouv cat 10')  


    $montant2 = 25.000;
    else
        if ($val_grade == 'C' or    $val_grade == 'D'  
         or     $val_grade =='ouv cat 1' or $val_grade =='ouv cat 2' or $val_grade =='ouv cat 3'    
         or $val_grade =='ouv cat 4' or $val_grade =='ouv cat 5' or $val_grade =='ouv cat 6' or $val_grade =='ouv cat 7')

    $montant2 = 18.000;


if ( $time_h <= 7 )
$prime = 0;
else

    if ( $time_h >7 && $time_h <= 14 ) 
$prime = 0.5 * $montant1;

else


    if ( $time_h >14 && $time_h < 24 )
$prime = $montant1; 


else


    if ( $time_h >=24 ) 
$prime = $montant2;     

$tbl=$tbl. '<tr>
<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->datedep .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->lieudep .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->destination .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->heuredep .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->heureret .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $time_h .'</td>
<td style="border: 0px solid #000000; text-align:center">'. $prime .'</td>
<td style="border: 0px solid #000000; text-align:center;"> '.$row1->matriculevoiture .' </td>

<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center"></td>
</tr>
' ;

}


}

$tbl=$tbl.' </thead></table> ';


$pdf->writeHTML($tbl, true, false, false, false, '');


  // WHAT SHALL I ADD HERE TO CALCULATE the TOTAL VALUE i.e SUM OF "$PRIME" ROWS?

// close and output PDF document
 $date_auj=date('dmY',NOW());
    $strr = "Rapport-".$date_auj.".pdf";
$pdf->Output($strr, 'I');
//ob_end_clean(); 
//$pdf->Output($strr, 'I');

//============================================================+
// END OF FILE
//============================================================+
?>

【问题讨论】:

  • 你的问题一点都不清楚。你想要哪一列的总和?考虑editing 你的问题,所以只是显示问题所需的代码。提示,如果您要求和的内容在您的 foreach 循环中,请在该循环中进行加法并在您需要的地方使用结果。还可以看看如何创建Minimal, Complete and Verifiable Example
  • 非常感谢。该列名为: مبلغ منحة التنقل ,同一列的每一行显示我命名为“$prime”的字段的不同值。我只想在脚本末尾添加(for 循环?)来计算“$prime”的所有显示值。我通过添加一个图像来编辑我的问题,该图像更好地解释了我的表格和我想要计算的内容。 (请参阅链接)。
  • 你试过一步一步解决这两个问题吗?如果您的 SQL 查询返回不正确的数据,则没有与 PDF 库的连接。如果查询返回正确的数据,但您的 PDF 不包含它,则根本没有与 SQL 的连接

标签: php html sql codeigniter tcpdf


【解决方案1】:

你可以在$prime变量之前声明一个变量

$grandPrime=0;
$prime=0;
foreach ($query->result() as $row){

在这里初始化

$grandPrime+=$prime;
$tbl=$tbl. '<tr>
<td style="border: 0px solid #000000; text-align:center"></td>
<td style="border: 0px solid #000000; text-align:center">'. $row1->datedep .'</td>

并在循环结束后使用它。

【讨论】:

  • 谢谢你亲爱的马哈茂德!确实,$grandPrime 不见了。我通过添加解决了这个问题。 $grandPrime=0; $prime=0; foreach ($query->result() as $row){ //我的 IF 条件等 $grandPrime+=$prime; $tbl=$tbl。 ' //我的表格内容..等等。 ' ; $pdf->writeHTML($tbl, true, false, false, false, ''); // 然后我添加了一个 FOR 循环来显示 grandPRIME 值 $num_prime = count($prime); for($i = 0; $i SetFont('xzar', 'B', 11); $pdf->Cell(277,5, " المبلغ الجملي $grandPrime ",1,0,'C'); }
  • @Miss_w 我很高兴听到这个消息,如果我的回答对您有所帮助,请将其标记为已接受的答案。
【解决方案2】:

感谢亲爱的会员们的宝贵帮助!实际上,缺少另一个总和变量。 我通过添加它解决了这个问题,如下所示:

$grandPrime=0; $prime=0; 

foreach ($query->result() as $row)

{ //我的 IF 条件来计算 PRIME 等的价值 ..

$grandPrime+=$prime; 

$tbl=$tbl. '<tr> 

//我的表格内容..等等

</tr> ' ; } 
$pdf->writeHTML($tbl, true, false, false, false, ''); 

// 然后我添加了一个 FOR 循环来显示 grandPRIME VALUE,其中 $num_prime 只是素数行数

$num_prime = count($prime);
 for($i = 0; $i < $num_prime; ++$i) 
{ $pdf->SetFont('xzar', 'B', 11);
 $pdf->Cell(277,5, " المبلغ الجملي $grandPrime ",1,0,'C'); 
} 

这是我最终得到的正确结果:Please clic the link to see the picture

再次感谢你 :)) 你真的帮助了我!

【讨论】:

    【解决方案3】:

    行后

    $prime=0;
    

    添加另一个变量,我们将其命名为 $sumPrimes

    $sumPrimes =0;
    

    在您分配 $prime 时,在您最后一次 else 之后:

    else
        if ( $time_h >=24 ) 
    $prime = $montant2;
    

    你可以这样计算总和:

    $sumPrimes += $prime;
    

    在你的 foreach 之后和你关闭表格之前:

    $tbl=$tbl.' </thead></table> ';
    

    您可以打印$sumPrimes.

    【讨论】:

    • 谢谢你亲爱的阿卜杜罗!实际上,缺少一个总和变量。我通过添加解决了这个问题。 $grandPrime=0; $prime=0; foreach ($query->result() as $row){ //我的 IF 条件等 $grandPrime+=$prime; $tbl=$tbl。 ' //我的表格内容..等等。 ' ; $pdf->writeHTML($tbl, true, false, false, false, ''); // 然后我添加了一个 FOR 循环来显示 grandPRIME 值 $num_prime = count($prime); for($i = 0; $i SetFont('xzar', 'B', 11); $pdf->Cell(277,5, " المبلغ الجملي $grandPrime ",1,0,'C'); }
    • @Miss_w 我很高兴听到这个消息,如果我的回答对您有所帮助,请将其标记为已接受的答案。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2011-08-12
    • 2019-06-22
    • 1970-01-01
    • 2018-03-13
    • 2018-07-14
    • 2021-01-22
    • 2023-04-04
    相关资源
    最近更新 更多