RSS

PDF desde PHP: Recibir datos desde la BD (5/5)

07 Abr

Viene lo más “difícil” del tutorial que es obtener datos desde la BD y lo que haremos primero será crearla con la siguiente estructura que se ve en la imagen. En el zip con el proyecto completo está la base de datos (.sql) para que solo la exporten, puedes descargar el proyecto completo desde mi googleDrive 😀 También puedes ver en funcionamiento el ejemplo desde aquí 😀

La base de datos se llama empleado y la tabla persona:

db

Los archivos para conexión a la base de datos son dos y los vamos a poner en la carpeta PHP. Uno es dbconfig.php que es donde estarán definidos los parámetros para conectarse a la base de datos y el otro es myDBC.php que es una clase donde estarán los métodos para hacer el INSERT, DELETE, SELECT y demás.

Veamos el contenido de dbconfig.php

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

Ahora el contenido de la clase myDBC.php y vean la definición del método con nombre obtenerPersona que nos traerá toda la información del empleado que coincida con la matrícula que se le pase.

<?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 obtenerPersona($matricula)
    {
		//Obtener todos los campos de la tabla
        $q = "select * FROM persona WHERE matricula = '$matricula'";

        $result = $this->runQuery($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)
        {
             //Podemos comprobar si el array está vacío y mostrar un PDF en blanco que diga que no se encontró información para esa matrícula
             return $valores;
        }
          //En otro caso, se recibe la información y se
          //se regresa un array con los datos de la consulta
		else{
			while($row = $result->fetch_assoc())
			{
				//Se agrega cada valor en el array
				array_push($valores, $row);
			}
		}
			//Regresa array asociativo
			return $valores;
	}//Fin obtenerPersona

}//Fin clase
?>

Por último modificamos de nuevo nuestro archivo de vista y tendrá lo siguiente para recibir datos desde un objeto que llamará al me toda la información de una persona. Aquí de nuevo resalté el código php para ver mejor. Los datos que se muestran en una tabla serán el nombre, apellido paterno, apellido materno, correo y edad. Dentro del tag <page> podemos definir a nuestro gusto tablas, divs, backgrounds y toda libertad del html y css nos proporciona para hacer el diseño de nuestra hoja como requiera el diseño. Sencillo fácil y altamente dinámico que con otras librerías es casi imposible de obtener.

<?php
	require_once'../myDBC.php';

	$dia = $_POST["dia"];
	$mes = $_POST["mes"];
	$anio= $_POST["anio"];

	$matricula = $_POST["matricula"];

	$conexion = new myDBC();
	$mat = $conexion->clearText($matricula);
	$datos = $conexion->obtenerPersona($mat);

?>

<style>
<!--
#encabezado {padding:10px 0; border-top: 1px solid; border-bottom: 1px solid; width:100%;}
#encabezado .fila #col_1 {width: 15%}
#encabezado .fila #col_2 {text-align:center; width: 55%}
#encabezado .fila #col_3 {width: 15%}
#encabezado .fila #col_4 {width: 15%}

#encabezado .fila td img {width:50%}
#encabezado .fila #col_2 #span1{font-size: 15px;}
#encabezado .fila #col_2 #span2{font-size: 12px; color: #4d9;}

#footer {padding-top:5px 0; border-top: 2px solid #46d; width:100%;}
#footer .fila td {text-align:center; width:100%;}
#footer .fila td span {font-size: 10px; color: #000;}

#fecha {margin-top:70px; width:100%;}
#fecha tr td {text-align: right; width:100%;}

#central {margin-top:20px; width:100%;}
#central tr td {padding: 10px; text-align: justify; width:100%;}

#datos {border:1px solid; margin-left:180px; width:50%;}
#datos tr {border:1px solid;}
#datos tr td{border:1px solid;}
-->
</style>
<page backtop="10mm" backbottom="10mm" backleft="10mm" backright="20mm">
    <page_header>
		<table id="encabezado">
            <tr class="fila">
                <td id="col_1" >
					<img src="../../images/img_izq.png">

				</td>
                <td id="col_2">
					<span id="span1">Aquí pueden ir más span o divs según requiera el diseño</span>
					<br>
					<span id="span2">Este es otro span con otros estilos</span>
				</td>
                <td id="col_3">
					<img  src="../../images/img_der_1.png">
				</td>
                <td id="col_4">
					<img src="../../images/img_der_2.png">
				</td>
            </tr>
        </table>
    </page_header>

    <page_footer>
		<table id="footer">
            <tr class="fila">
				<td>
					<span>Este el footer y pueder ir con letra más pequeña por ejemplo poner una
					dirección o algo así :P</span>
				</td>
			</tr>
        </table>
    </page_footer>

    <table id="fecha">
		<tr class="fila">
			<td>
				<?php echo "México D.F a ". $dia . " de ". $mes . " de " . $anio;?>
			</td>
		</tr>
	</table>

	<table id="central">
		<tr class="fila">
			<td>
				Es es un texto fijo que puede ir directamente dentro de la vista.
				Este texto está dentro de una tabla con una fila y una columna que tendra un color de fondo con
				background color azul para identificarlo. El texto esta justificado
				Con HTML2PDF las posiciones X, Y ya no serán un problema, ya que usando la tabla anterior con
				width a 100% esta tabla de texto con texto fijo se pone inmediatamente debajo. También podemos usar
				un padding arriba-abajo para separar. Si es necesario 'mover' podemos usar margin.
				<br><br>
				Aquí hubo un salto de línea con con el tag br y podemos poner span como en este texto que dice hola ->
				<span style="color:#f00">HOLA</span> y es de color rojo. El siguiente tr td mostrará los datos de la
				BD, tendrá un background
				<br><br>
				Cuando veas el código de este hoja, te darás cuenta que son simplemente tablas con tablas anidadas.
				Puedes usar divs si lo prefieres también, para mí se me facilita más con tablas
			</td>
		</tr>

		<tr>
			<td >
				<table id="datos">
					<tr class="fila">
						<td style="width:30%">
							Nombre:
						</td>
						<td style="width:70%">
							<?php echo $datos[0]["nombre"]. ' '. $datos[0]["apellidoPat"] . ' '.$datos[0]["apellidoMat"];?>
						</td>
					</tr>
					<tr class="fila">
						<td style="width:30%">
							Matricula:
						</td>
						<td style="width:70%">
							<?php echo $datos[0]["matricula"];?>
						</td>
					</tr>
					<tr class="fila">
						<td style="width:30%">
							Correo:
						</td>
						<td style="width:70%">
							<?php echo $datos[0]["correo"];?>
						</td>
					</tr>
					<tr class="fila">
						<td style="width:30%">
							Edad:
						</td>
						<td style="width:70%">
							<?php echo $datos[0]["edad"];?>
						</td>
					</tr>
				</table>
			</td>
		</tr>
		<tr>
			<td>
				<br><br><br><br>
				<br><br><br><br>
				<br><br><br><br>
				<br>
				Algunas líneas más 😀 que tienen previamente
				saltos de línea con el tag br
				<br><br>
				Acá podemos usar saltos y saltos de líneas, tantos como
				requiera tu diseño
			</td>
		</tr>
	</table>

</page>

Ahora un secuencia en imágenes:

tabla

index

 

matricula

db_info

 

Espero que este tutorial sea de su agrado y que les ayude mucho en sus propios proyectos. 😀 Gracias por leer el blog, cualquier duda o sugerencia me la pueden hacer en ringhugos@gmail.com

Te recuerdo que puedes descargar el directorio completo listo para usarse desde mi googleDrive 😀 o puedes ver el ejemplo completo en funcionamiento desde este enlace (solo espera 5 segundos, click en “saltar publicidad” y te lleva directo al ejemplo).

 
3 comentarios

Publicado por en 7 abril, 2015 en HTML2PDF

 

Etiquetas: ,

3 Respuestas a “PDF desde PHP: Recibir datos desde la BD (5/5)

  1. Sebastián Pozo

    9 febrero, 2016 at 16:44

    Excelente tutorial, espero que aún este activo. Tengo una duda estoy generando un pdf de muchas páginas, pero en ciertas ocasiones me inserta algunas páginas en blanco, cuál puede ser el motivo o solución. Espero alguien me responda gracias….

     
  2. casavilcacom

    15 diciembre, 2016 at 12:44

    yo tengo mi propio diseño de html y css con acceso a base de datos para importar datos pero cuando cargo el codigo a pdf_blanco.php se desconfigura el diseño ayudaaaa

     

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: