首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解TCPDF

试图理解TCPDF
EN

Stack Overflow用户
提问于 2015-08-05 00:38:11
回答 1查看 328关注 0票数 0

我试图从PHP获得一个PDF文档。到目前为止一切都很好,但现在我正在努力:

代码语言:javascript
复制
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)是从另一个文件调用的函数。

如果我写:

代码语言:javascript
复制
$nombre_plato .=  "  ".$row['plato_pedido']."";

然后,输出与预期的相同($row‘’plato_pedido‘=1),有4行:

但是使用所需的代码

代码语言:javascript
复制
$nombre_plato .=  "  ".recuperar_nombre_plato($row['plato_pedido'])."";

输出是空白,没有输出。该函数在其他files.The输出字符串上运行良好,显示在其他文件上,但这里不显示。

欢迎任何帮助..。

编辑:

代码语言:javascript
复制
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();
    }


}

完整的源代码:

代码语言:javascript
复制
<?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
//============================================================+

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 01:00:12

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

代码语言:javascript
复制
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是唯一的键,查询只能返回一行,则更改代码以反映这一事实。

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
$nombre_plato ="";
while($row = mysqli_fetch_array($result)) {
   $nombre_plato .= "  ".recuperar_nombre_plato($row['plato_pedido']);
}
$pdf->writeHTML($nombre_plato, true, 0, true, 0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31821587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档