FPDF agregar datos desde la BD

FPDF: Agregardatos desde la BD (7/7)

Hugui Dugui

Por último vamos a obtener un registro de la base de datos y lo pondremos en una tabla dentro del documento, para la conexión a la base de datos usaremos dos archivos: dbconfig.php donde estarán los datos de conexión a la base de datos y myDBC.php, que contendrá los métodos necesarios para realizar SELECT, INSERT etc., en este caso solo contendrá el método llamado seleccionar_persona($matricula).

En el archivo PDF.php se añadirán tres métodos:

  1. Cabecera($array) : Crea la parte fija de la tabla, es decir, la que tiene los títulos de las columnas. Para ello se le envía como parámetro un array de cadenas (los títulos) y el método se encarga de poner cada elemento del array en una celda hasta terminar con todos sus elementos.
  2. Datos($array) : Crea la parte dinámica de la tabla. En una variable se guardará el array asociativo que regresa el método seleccionar_persona() y le asigna una celda a cada elemento del mismo.
  3. Tabla($array, $array) : Integra en un método los 2 métodos anteriores.


Veamos el contenido de PDF.php:

<?php
include_once('fpdf.php');
class PDF extends FPDF
{
    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        $this->Cell(0,10,'Este es el pie de página creado con el método Footer() de la clase creada PDF que hereda de FPDF','T',0,'C');
    }
 
    function Header()
    {
        $this->SetFont('Arial','B',9);
 
        $this->Line(10,10,206,10);
        $this->Line(10,35.5,206,35.5);
 
        $this->Cell(30,25,'',0,0,'C',$this->Image('../img/logo.png', 152,12, 19));
        $this->Cell(111,25,'ALGÚN TÍTULO DE ALGÚN LUGAR :D',0,0,'C', $this->Image('../img/logoIzquierda.png',20,12,20));
        $this->Cell(40,25,'',0,0,'C',$this->Image('../img/logoDerecha.png', 175, 12, 19));
 
        $this->Ln(25);
    }
 
    function ImprimirTexto($file)
    {
        $txt = file_get_contents($file);
        $this->SetFont('Arial','',12);
        $this->MultiCell(0,5,$txt);
 
    }
 
    function cabecera($cabecera){
        $this->SetXY(50,105);
        $this->SetFont('Arial','B',15);
        foreach($cabecera as $columna)
        {
            $this->Cell(40,7,$columna,1, 2 , 'L' ) ;
        }
    }
 
    function datos($datos){
 
        $this->SetXY(90,105);
        $this->SetFont('Arial','',12);
        foreach ($datos as $columna)
        {
            $this->Cell(65,7,utf8_decode($columna['Nombre']),'TRB',2,'L' );
            $this->Cell(65,7,utf8_decode($columna['ApellidoPat']),'TRB',2,'L' );
            $this->Cell(65,7,utf8_decode($columna['ApellidoMat']),'TRB',2,'L' );
            $this->Cell(65,7,utf8_decode($columna['Matricula']),'TRB',2,'L' );
            $this->Cell(65,7,utf8_decode($columna['Puesto']),'TRB',2,'L' );
        }
    }
 
    //El método tabla integra a los métodos cabecera y datos
    function tabla($cabecera,$datos){
        $this->cabecera ($cabecera) ;
        $this->datos($datos);
    }
 
}//fin clase PDF
?>

El contenido de creaPDF.php:

<?php
include_once('PDF.php');
include_once('myDBC.php');
 
    $mat = $_POST['matricula'];
 
    //Recibimos dentro de una cadena la fecha
    $fecha="México D.F. a ".$_POST['dia']." de ". $_POST['mes']. " de ".$_POST['anio'];
 
    //Se crea un objeto de PDF
    //Para hacer uso de los métodos
    $pdf = new PDF();
    $pdf->AddPage('P', 'Letter');
    $pdf->SetFont('Arial','B',12);
    $pdf->Cell(0,10,$fecha,0,1,'R'); 
 
    $pdf->Cell(40,7,'P  R  E  S  E  N  T  E',0, 1 , ' L ');
    $pdf->Ln();
 
    $pdf->ImprimirTexto('textoFijo.txt'); //Texto fijo 
 
    //Creamos objeto de la clase myDBC
    //para hacer uso del método seleccionar_persona()
    $consultaPersona = new myDBC();
 
    //En una variable guardamos el array que regresa el método
    $datosPersona = $consultaPersona->seleccionar_persona($mat);
 
    //Array de cadenas para la cabecera
    $cabecera = array("Nombre","A Paterno","A Materno", "Matricula", "Puesto");
    $pdf->tabla($cabecera,$datosPersona); //Método que integra a cabecera y datos
 
    $pdf->Output(); //Salida al navegador del pdf
?>

dbconfig.php tiene:

<?php
    define("DB_SERVER", "localhost");
    define("DB_USER", "root");
    define("DB_PASS", "");
    define("DB_NAME", "empleado");
?>

El contenido de myDBC.php que tiene el método que trae los datos de un registro de la base de datos:

<?php
class myDBC {
 
    public $mysqli = null;
 
    public function __construct() {
 
        include_once 'dbconfig.php';
        $this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
 
        if ($this->mysqli->connect_errno) {
            echo "Error MySQLi: ("&nbsp. $this->mysqli->connect_errno.") " . $this->mysqli->connect_error;
            exit();
        }
        $this->mysqli->set_charset("utf8");
    }
 
    public function __destruct() {
        $this->CloseDB();
    }
 
    public function runQuery($qry) {
        $result = $this->mysqli->query($qry);
        return $result;
    }
 
    public function CloseDB() {
        $this->mysqli->close();
    }
 
    public function clearText($text) {
        $text = trim($text);
        return $this->mysqli->real_escape_string($text);
    }
 
    public function seleccionar_persona($matricula)
    {
        $q = "select Nombre, ApellidoPat,
                     ApellidoMat, Matricula,
                     Puesto from persona
                     where
                     Matricula = '$matricula'";
 
        $result = $this->mysqli->query($q);
        //Array asociativo que contendrá los datos
        $valores = array();
                //Si no hay resultados
                //Se avisa al usuario y se redirige al index de la aplicación
        if( $result->num_rows == 0)
        {
            echo'<script type="text/javascript">
              alert("Ningun registro");
              window.location="http://localhost/pdfenphpupdate/index.php"
            </script>';
        }
          //En otro caso, se recibe la información y se
          //se regresa un array con los datos de la consulta
      else{
            while($row = mysqli_fetch_assoc($result))
            {
                //Se agrega cada valor en el array
                array_push($valores, $row);
            }
          }
        //Regresa array asociativo
        return $valores;
    }
}
?>

Una imagen de la base de datos:


Ahora una secuencia de uso:





No olvides que puedes descargar el zip de esta entrada con el proyecto completo FPDF, obtener registro de la base de datos. Espero que me quieras compartir tus avances y/o dudas en el grupo de facebook del curso.

Si quieres puedes escribirme a ringhugos@gmail.com o al whatsapp para cualquier comentario o duda que tengas sobre este tutorial.