Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Formatando Relatório com PHP, MYSQL e HTML


Hambonso

Pergunta

Eu estou com dificuldades para mudar um relatório gerado. Atualmente, o código gera o relatório de maneira bruta, ou seja, ele exibe todo o conteúdo da tabela. As informações a serem usadas nesse relatório, está em uma única tabela, e essa tabela possui vários registros de uma mesma pessoa, e eu gostaria de mudar o layout do relatório, para que ele possa exibir conforme o exemplo da imagem abaixo:

exemplo.jpg

Eu queria saber, como eu posso montar o relatório como o modelo acima. Detalhe, usando apenas PHP, MySQL e HTML, pois o servidor aonde ficará esse código, não possui muito recursos disponíveis, por isso tem que ser em PHP, MySQL e HTML.

Desde já agradeço pela atenção e ajuda.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Então vamos lá.

Supondo que você tenha 2 campos na sua tabela, um chamado nome, que será o nome das pessoas, e outro chamado dados, que conterá os dados quaisquer.

Suponha também que a tabela se chame atividades:

Primeiro você fará um select usando GROUP BY.

Por que?

Porque existem vários registros com o mesmo nome, e você quer pegar cada nome apenas uma vez.

Utilizaremos também um ORDER BY / ASC, pra organizarmos tudo em ordem alfabética.

$consulta = mysql_query("SELECT `nome` FROM `atividades` GROUP BY `nome` ORDER BY `nome` ASC");
while($resultado = mysql_fetch_array($consulta0)){
     // SEU SELECT PARA PEGAR OS DADOS DAS PESSOAS
     }
Ali no comentário // SEU SELECT PARA PEGAR OS DADOS DAS PESSOAS você fará seu select pegando os dados de cada usuário:
$Nome = $resultado["nome"]; // Aqui eu pego o nome da pessoa
$outra_consulta = mysql_query("SELECT * FROM `atividades` WHERE `nome` = '$Nome'");
if ($outro_resultado = mysql_fetch_array($outra_consulta){ // Se existir algum resultado
     do { // Faça isso
          // Pega os valores, monta a tabela e imprime
          }
     while($outro_resultado = mysql_fetch_array($outra_consulta)); // Enquanto existir dados no db
     }

Um problema:

Se você tiver um homônimo, por exemplo, duas pessoas com o nome José da Silva, este script considerará tudo como uma pessoa só.

Para corrigir você deverá criar uma outra tabela com os nomes dos usuários e um id, que será único, e nesta tabela do relatório, jogar apenas o ID dessa pessoa.

Assim, como o ID será diferente, ele tratará como pessoas diferentes também.

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi !!!... Quanto aos homônios, até pode existir, mas no lugar de selecionar o nome, eu vou fazer com que ele verifique pela matrícula da pessoa, pois com esse dado, não corre o risco de pegar dados, caso ocorra homônios no banco. Eu vou testar e depois volto para dizer o resultado, até lá agradeço pelas informações.

Link para o comentário
Compartilhar em outros sites

  • 0

O código que você passou, está fazendo certo em parte. Exibindo os dados ele está, se no banco o JOSÉ DE TAL possui 5 registros, ele exibe o nome e mas repete 5 vezes o primeiro registro da pessoa. Olha como está o código:

<?php
                $consulta = mysql_query("SELECT * FROM posicaofundos GROUP BY matricula ORDER BY nome ASC");
                while($resultado = mysql_fetch_array($consulta))
                {
                    $matricula = $resultado["matricula"]; // Aqui eu pego o nome da pessoa
                    $nome = $resultado["nome"];
                    echo "
                        <table align='center' width='100%' border='0' cellspacing='1' cellpadding='0' bgcolor='#FFFFFF'>
                            <tr>
                                <td align='left' class='imprimir2' bgcolor='#CCCCCC' width='50%'> $matricula - $nome</td>
                            </tr>
                        <table align='center' width='100%' border='0' cellspacing='1' cellpadding='0' bgcolor='#FFFFFF'>
                            <tr>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='35%'> </td>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>DATA OPERAÇÃO</td>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='15%'>DATA CONVERSÃO</td>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>QTD DE COTAS</td>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>VL APLICADO</td>
                                <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>VL CORRIGIDO</td>
                            </tr>";
                        
                    $outra_consulta = mysql_query("SELECT * FROM posicaofundos WHERE matricula = '$matricula'");
                    if ($outro_resultado = mysql_fetch_array($outra_consulta))
                    { // Se existir algum resultado
                        $oper = $outro_resultado["dtoperacao"];
                        $conver = $outro_resultado["dtconversao"];
                        $cotas = $outro_resultado["qtcotas"];
                        $aplic = $outro_resultado["vlaplicacao"];
                        $corig = $outro_resultado["vlcorrigido"];
                        do
                        {
                            echo "
                                    <tr>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='35%'> </td>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>$oper</td>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='15%'>$conver</td>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>$cotas</td>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>$aplic</td>
                                        <td align='center' class='imprimir2' bgcolor='#CCCCCC' width='12%'>$corig</td>
                                    </tr>";
                        }
                        while($outro_resultado = mysql_fetch_array($outra_consulta)); // Enquanto existir dados no db
                    }
                }
            ?>

Veja como ele está exibindo o relatório na imagem abaixo, estruturalmente, era isso mesmo que eu estava precisando, mas ele repete o primeiro registro da pessoa encontrada a quantidade de vezes que tenha registro desta pessoa no banco.

exemplo1.jpg

Ele exibe a quantidade certa, mas não os valores certo, é como se ele não estivesse fazendo o NEXT nos registro.

Link para o comentário
Compartilhar em outros sites

  • 0

Muda isso:

$oper = $outro_resultado["dtoperacao"];
                        $conver = $outro_resultado["dtconversao"];
                        $cotas = $outro_resultado["qtcotas"];
                        $aplic = $outro_resultado["vlaplicacao"];
                        $corig = $outro_resultado["vlcorrigido"];
                        do
                        {
Pra isso:
do
                        {
                            $oper = $outro_resultado["dtoperacao"];
                            $conver = $outro_resultado["dtconversao"];
                            $cotas = $outro_resultado["qtcotas"];
                            $aplic = $outro_resultado["vlaplicacao"];
                            $corig = $outro_resultado["vlcorrigido"];

Você precisa atribuir os valores pra cada vez que o ponteiro for avançado, senão ele avançará mas imprimirá sempre o mesmo valor.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...