试图了解TCPDF

时间:2015-08-05 00:38:12

标签: php tcpdf

我正在尝试从PHP获取PDF文档。到目前为止它工作正常,但现在我正在战斗:

while($row = mysqli_fetch_array($result))
  {
  $nombre_plato ="";
  $nombre_plato .=  "  ".recuperar_nombre_plato($row['plato_pedido'])."";

  $pdf->writeHTML($nombre_plato, true, 0, true, 0);
}

recuperar_nombre_plato($ variable)是从另一个文件调用的函数。

如果我写:

$nombre_plato .=  "  ".$row['plato_pedido']."";

然后,输出符合预期($ row [' plato_pedido'] = 1),有4行:

enter image description here

但使用所需的代码

$nombre_plato .=  "  ".recuperar_nombre_plato($row['plato_pedido'])."";

输出是空格,没有输出。 该函数适用于其他文件。输出字符串显示在其他文件上,但不在此处。

欢迎任何帮助......

编辑:

function recuperar_nombre_plato ($recibido) {

/*** mysql hostname ***/
$hostname = 'XXX';

/*** mysql username ***/
$username = 'XXX';

/*** mysql password ***/
$password = 'XXX';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=XXX", $username, $password);
    /*** echo a message saying we have connected ***/



    $sql = "SELECT * FROM tb_platos WHERE id_plato = '".$recibido."'";
    foreach ($dbh->query($sql) as $row)
        {
        return $row['nombre_plato'];
        }


    $dbh = null;
}
catch(PDOException $e)
    {
    echo $e->getMessage();
    }


}

完整的源代码:

<?php session_start();
include "funciones.php"; 
include "definiciones.php";
require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Dario Balas');
$pdf->SetTitle('PDF');
$pdf->SetSubject('PDF');
$pdf->SetKeywords('PDF');
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->setFontSubsetting(true);
// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->SetFont('helvetica', 'B', 12);
// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();
// Set some content to print

$pdf->Image('imagenes/logo_restaurante.gif',20, 20, 20, 25, '', '', 'T', false, 72, '', false, false, 1, false, false, false);

$pdf->SetXY(20, 42);
$pdf->writeHTML($nombre_restaurante,'<br>');
$pdf->SetXY(20, 47);
$pdf->writeHTML($direccion_restaurante,'<br>');
$pdf->SetXY(20, 52);
$pdf->writeHTML($ciudad_restaurante,'<br>');
$pdf->SetXY(130, 12);
$pdf->writeHTML("Orden ".$_SESSION['pedido'],'<br>');
$pdf->SetFont('helvetica', 'B', 12);
$pdf->SetXY(130, 17);
$pdf->writeHTML("Fecha/Hora inicio: ",'<br>');
$pdf->SetFont('helvetica', '', 12);
$pdf->SetXY(130, 22);
$pdf->writeHTML(recuperar_fecha_pedido($_SESSION['pedido']),'<br>');
$pdf->SetFont('helvetica', 'B', 12);
$pdf->SetXY(130, 27);
$pdf->writeHTML("Le atendió: ",'<br>');
$pdf->SetXY(130, 32);
$pdf->SetFont('helvetica', '', 12);
$pdf->writeHTML(recuperar_nombre_usuario(recuperar_atendio_pedido($_SESSION['pedido'])),'<br>');
$pdf->SetFont('helvetica', 'B', 12);
$pdf->SetXY(130, 37);
$pdf->writeHTML("Mesa: ",'<br>');
$pdf->SetFont('helvetica', '', 12);
$pdf->SetXY(130, 42);
$pdf->writeHTML(recuperar_nombre_mesa(recuperar_mesa_pedido($_SESSION['pedido'])),'<br>');
$con=mysqli_connect("localhost","XXX","XXX","XXX");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  $pdf->SetXY(15, 72);
  $x= 72;
  $nombre_plato ="";
$result = mysqli_query($con,"SELECT * FROM tb_lineas_comanda WHERE id_pedido = '".$_SESSION['pedido']."'");
while($row = mysqli_fetch_array($result))
  {

  $nombre_plato .=  "  ".recuperar_nombre_plato($row['plato_pedido'])."";


}

$pdf->writeHTML($nombre_plato, true, 0, true, 0);
// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('', 'I');
//============================================================+
// END OF FILE
//============================================================+

?>

1 个答案:

答案 0 :(得分:2)

你不能从函数返回多个东西,所以循环中的return语句是没有意义的。因此,在此循环中构建一个临时字符串,然后返回该字符串。

function recuperar_nombre_plato ($recibido) {
    $hostname = 'XXX';
    $username = 'XXX';
    $password = 'XXX';

    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=XXX", $username, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql = "SELECT * FROM tb_platos WHERE id_plato = '".$recibido."'";
        $str = '';
        foreach ($dbh->query($sql) as $row) {
            $str .= $row['nombre_plato'];
        }
        return $str;

        // nothing happens after a return so this will never get run
        //$dbh = null;  
    }
    catch(PDOException $e) {
        echo $e->getMessage();
    }
}

或者,如果查询只返回一行,因为id_plato是唯一键,则更改代码以反映该事实。

function recuperar_nombre_plato ($recibido) {
    $hostname = 'XXX';
    $username = 'XXX';
    $password = 'XXX';

    try {

        $dbh = new PDO("mysql:host=$hostname;dbname=XXX", $username, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql = "SELECT * FROM tb_platos WHERE id_plato = '".$recibido."'";

        $stmt = $dbh->query($sql);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        return $row['nombre_plato'];

        // nothing happens after a return so this will never get run
        //$dbh = null;  
    }
    catch(PDOException $e) {
        echo $e->getMessage();
    }
}

同样在您的main函数中,当您从多个recuperar_nombre_plato()调用构建文本字符串时,您是否不希望将调用移到循环外的$pdf->writeHTML。并且在循环之前初始化$nombre_plato,如下所示: -

$nombre_plato ="";
while($row = mysqli_fetch_array($result)) {
   $nombre_plato .= "  ".recuperar_nombre_plato($row['plato_pedido']);
}
$pdf->writeHTML($nombre_plato, true, 0, true, 0);
相关问题