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:
- 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.
- 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.
- 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: (" . $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="https://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.