PHP while 循环只显示最后一行
PHP While loop displaying only last row
我正在使用 TCPDF 库生成 table 的 PDF。
Table 行数很少,比如 10
其中两行发票号相同"78650"
现在我按发票编号选择,并且根据需要它应该生成 两行。
但它只获取 第二行 ,即最后一行。也就是只拍了2号.
代码如下:
<?php
require_once('TCPDF/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
$pdf->SetFont('helvetica', '', 9);
$pdf->AddPage();
$html1 = '<table cellspacing="0" class="table table-striped">
<tr>
<th>SL No.</th>
<th>Product</th>
<th>Description</th>
<th>Qty</th>
<th>Total</th>
</tr>';
$sql = ("select * from invoice WHERE invoice_no = 78650 ORDER BY invoice_id ASC");
$result=mysqli_query($connection,$sql);
$i = 1;
while($row = mysqli_fetch_array($result)){
$pr = $row['product'];
$dr = $row['description'];
$qty = $row['qty'];
$total = $row['total'];
$html2 = "<tr>
<td>".$i."</td>
<td>".$pr."</td>
<td>".$dr."</td>
<td>".$qty."</td>
<td>".$total."</td>
</tr>";
$i++; }
$sql_1 = ("select *,SUM(total)as tot from invoice WHERE invoice_no = 78650 GROUP BY invoice_no");
$result_1=mysqli_query($connection,$sql_1);
$row_1 = mysqli_fetch_array($result_1);
$tot = $row_1['tot'];
$html3 = "<tr>
<td></td>
<td></td>
<td></td>
<td>Total: </td>
<td>".$tot."</td>
</tr>
</table>";
$html = $html1.$html2.$html3;
$pdf->writeHTML($html, true, 0, true, 0);
$pdf->lastPage();
$pdf->Output('htmlout.pdf', 'I');
?>
那是因为对于迭代,您要替换 $html2
的内容。您将需要附加内容。
因此,将空白 $html2
变量放在循环之外,并在迭代循环时追加结果。
代码看起来像这样,
$html2="";
while($row = mysqli_fetch_array($result)){
$pr = $row['product'];
$dr = $row['description'];
$qty = $row['qty'];
$total = $row['total'];
$html2 = $html2."<tr>
<td>".$i."</td>
<td>".$pr."</td>
<td>".$dr."</td>
<td>".$qty."</td>
<td>".$total."</td>
</tr>";
$i++;
}
第二次获取覆盖变量 $html2。您可以使用数组 $html2[$i].
$tbl_header = '<table border="1"><tr>
<th>FirstName</th><th>LastName</th><th>Gender</th><th>E-Mail</th><th>Mobile</th><th>DateOfBirth</th><th>Country</th><th>State</th><th>City</th><th>Address</th><th>Zipcode</th><th>File</th></tr>';
$tbl_footer = '</table>';
$tbl = '';
while($row = mysqli_fetch_array($result))
{
$tbl .= '
<tr><td>'.$row['firstname'].'</td><td>'.$row["lastname"].'</td><td>'.$row["sex"].'</td><td>'.$row["email"].'</td><td>'.$row["mobile"].'</td><td>'.$row["dob"].'</td><td>'.$row["country"].'</td><td>'.$row["state"].'</td><td>'.$row["city"].'</td><td>'.$row["address"].'</td>
<td>'.$row["zipcode"].'</td>
<td><img src="'.$row["file"].'"/></td>
</tr>
';
}
//$pdf->writeHTML($html, true, false, true, false, '');
$pdf->writeHTML($tbl_header . $tbl . $tbl_footer, true, false, false, false, '');
我正在使用 TCPDF 库生成 table 的 PDF。
Table 行数很少,比如 10
其中两行发票号相同"78650"
现在我按发票编号选择,并且根据需要它应该生成 两行。
但它只获取 第二行 ,即最后一行。也就是只拍了2号.
代码如下:
<?php
require_once('TCPDF/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
$pdf->SetFont('helvetica', '', 9);
$pdf->AddPage();
$html1 = '<table cellspacing="0" class="table table-striped">
<tr>
<th>SL No.</th>
<th>Product</th>
<th>Description</th>
<th>Qty</th>
<th>Total</th>
</tr>';
$sql = ("select * from invoice WHERE invoice_no = 78650 ORDER BY invoice_id ASC");
$result=mysqli_query($connection,$sql);
$i = 1;
while($row = mysqli_fetch_array($result)){
$pr = $row['product'];
$dr = $row['description'];
$qty = $row['qty'];
$total = $row['total'];
$html2 = "<tr>
<td>".$i."</td>
<td>".$pr."</td>
<td>".$dr."</td>
<td>".$qty."</td>
<td>".$total."</td>
</tr>";
$i++; }
$sql_1 = ("select *,SUM(total)as tot from invoice WHERE invoice_no = 78650 GROUP BY invoice_no");
$result_1=mysqli_query($connection,$sql_1);
$row_1 = mysqli_fetch_array($result_1);
$tot = $row_1['tot'];
$html3 = "<tr>
<td></td>
<td></td>
<td></td>
<td>Total: </td>
<td>".$tot."</td>
</tr>
</table>";
$html = $html1.$html2.$html3;
$pdf->writeHTML($html, true, 0, true, 0);
$pdf->lastPage();
$pdf->Output('htmlout.pdf', 'I');
?>
那是因为对于迭代,您要替换 $html2
的内容。您将需要附加内容。
因此,将空白 $html2
变量放在循环之外,并在迭代循环时追加结果。
代码看起来像这样,
$html2="";
while($row = mysqli_fetch_array($result)){
$pr = $row['product'];
$dr = $row['description'];
$qty = $row['qty'];
$total = $row['total'];
$html2 = $html2."<tr>
<td>".$i."</td>
<td>".$pr."</td>
<td>".$dr."</td>
<td>".$qty."</td>
<td>".$total."</td>
</tr>";
$i++;
}
第二次获取覆盖变量 $html2。您可以使用数组 $html2[$i].
$tbl_header = '<table border="1"><tr>
<th>FirstName</th><th>LastName</th><th>Gender</th><th>E-Mail</th><th>Mobile</th><th>DateOfBirth</th><th>Country</th><th>State</th><th>City</th><th>Address</th><th>Zipcode</th><th>File</th></tr>';
$tbl_footer = '</table>';
$tbl = '';
while($row = mysqli_fetch_array($result))
{
$tbl .= '
<tr><td>'.$row['firstname'].'</td><td>'.$row["lastname"].'</td><td>'.$row["sex"].'</td><td>'.$row["email"].'</td><td>'.$row["mobile"].'</td><td>'.$row["dob"].'</td><td>'.$row["country"].'</td><td>'.$row["state"].'</td><td>'.$row["city"].'</td><td>'.$row["address"].'</td>
<td>'.$row["zipcode"].'</td>
<td><img src="'.$row["file"].'"/></td>
</tr>
';
}
//$pdf->writeHTML($html, true, false, true, false, '');
$pdf->writeHTML($tbl_header . $tbl . $tbl_footer, true, false, false, false, '');