Jump to content

Relatório PDF com várias tabelas


Adampt
Go to solution Solved by M6,

Recommended Posts

<?php


// Require composer autoload
require '../pdf/fpdf.php';

$db = new PDO('mysql:host=localhost;dbname=******', 'root', '');

class myPDF extends FPDF
{

    public function header()
    {

        $ano = $_POST['ano'];

        $this->Image('../fimg/image.png', 10, 6, 50);
        $this->SetFont('arial', 'B', 14);
        $this->Cell(260, 5, 'RESTRIÇÕES ALIMENTARES', 0, 0, 'C');
        $this->Ln();
        $this->SetFont('arial', '', 12);
        $this->Cell(260, 10, 'Ano: ' . $ano, 0, 0, 'C');
        $this->Ln(30);
    }
    public function footer()
    {
        $this->SetY(-15);
        $this->SetFont('arial', '', 8);
        $this->Cell(0, 10, 'Página ' . $this->PageNo() . '/{nb}', 0, 0, 'C');
    }

    public function headerTable()
    {
        $this->SetFont('arial', 'B', 14);
        $this->cell(10);
        $this->cell(260, 10, 'LISTAGEM', 1, 0, 'C');

        $this->Ln();
        $this->cell(10);
        $this->SetFont('arial', 'B', 12);
        //$this->Cell(100, 7, 'Grupo', 1, 0, 'C');
        $this->Cell(70, 7, 'País', 1, 0, 'C');
        $this->Cell(100, 7, 'Nome', 1, 0, 'C');
        $this->Cell(90, 7, 'Restrição', 1, 0, 'C');


        $this->Ln();
    }
    public function viewtable($db)
    {

        $ano = $_POST['ano'];

        $this->SetFont('times', '', 9);

        $stmt = $db->query("SELECT tbl_grupos.*, tbl_inscricoes.*, tbl_elementos_grupos.*  FROM tbl_grupos LEFT JOIN tbl_inscricoes ON tbl_grupos.idgrupo = tbl_inscricoes.idgrupo LEFT JOIN
        tbl_elementos_grupos ON tbl_grupos.idgrupo = tbl_elementos_grupos.idgrupo WHERE tbl_inscricoes.anoinscricao = $ano  AND tbl_inscricoes.validado = 1 AND tbl_elementos_grupos.restricoesgel!='Nenhuma' OR tbl_elementos_grupos.restricoesoutrogel!='' GROUP BY tbl_elementos_grupos.nomegel ORDER BY tbl_elementos_grupos.idgrupo ASC");

        while ($data = $stmt->fetch(PDO::FETCH_OBJ)) {
            $this->SetFont('arial', '', 9);
            $this->cell(10);
            //$this->cell(100, 7, base64_decode($data->gnome), 1, 0, 'J');
            $this->Cell(70, 7, base64_decode($data->gpais), 1, 0, 'C');
            $this->Cell(100, 7, base64_decode($data->nomegel), 1, 0, 'C');
            $this->Cell(90, 7, $data->restricoesgel . ', ' . $data->restricoesoutrogel, 1, 0, 'C');
            $this->Ln();
        }
    }
}

$pdf = new myPDF();
$pdf->AliasNbPages();
$pdf->AddPage('L', 'A4', 0);
$pdf->headerTable();
$pdf->viewtable($db);
$pdf->Ln(15);

$pdf->Output();

?>
<script src="../js/sweetalert.js"></script>

Bom dia.

Tenho o código acima para gerar um relatório baseado em 3 tabelas.

Preciso que o relatório me apresente apenas os dados relativos a restrições alimentares para os grupos que estejam inscritos e aprovados para participar nas atividades em um determinado ano.

Com o código acima, são-me apresentados os dados de todos os elementos que tenham restrições allimentares independentemente do ano para que tenham sido aprovados.

Poderiam ajudar-me com esta situação?

Já tentei de diversas formas mas não funciona corretamente.

Link to comment
Share on other sites

A tua questão nada tem a ver com PDF mas sim com a obtenção de dados que vão popular o relatório.

Se não te está a dar o resultado pretendido, revê a tua query. Começa por garantir que os filtros e os joins estão corrretos.
Quando tiveres a query a devolver os resultados que pretendes, integra-a no código que vai gerar o relatório.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

M6 obrigado pela resposta.

O problema é mesmo que não consigo obter os dados pretendidos com os filtros aplicados.

Penso que o problema estará algures por aqui

WHERE tbl_inscricoes.anoinscricao = $ano  AND tbl_inscricoes.validado = 1 AND tbl_elementos_grupos.restricoesgel!='Nenhuma' OR tbl_elementos_grupos.restricoesoutrogel!=''

 

Link to comment
Share on other sites

  • Solution

O problema só pode estar ou na clausula where ou nos joins.
Presumo que seja na clausula where.

Tens ai um OR no meio dos ANDs, se não usares parêntesis a escolha das condições pode não ser a que estás à espera.
A and B and C or D , sem conhecer o sistema, diria que o que queres é A and B and (C or D)

 

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.