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

Problemas com Table


rafaelduarte

Pergunta

Olá amigos, gostaria de uma grande ajuda de vocês;
Sou estudante e iniciante de programação Web e estou com uma dúvida há dias, já pesquisei em vários fóruns, mas não consegui achar uma solução para o meu problema... Então resolvi pedir a ajuda de vocês com mais experiência que eu.

<table width="600" border="1" cellspacing="5" bgcolor="#FFFFFF">
        <tr align="center">
          <td width="400" align="center">Nome:</td>
          <!-- Repetição para aparecer todas as datas que contém frequência de uma determinada célula-->
         <?php do{?>
          <td align="center"><?php echo date('d/m/Y',strtotime($row_rs_datas_frequencia['data'])); ?></td>
          <?php }while($row_rs_datas_frequencia = mysql_fetch_assoc($rs_datas_frequencia))?>
          <td width="200" align="center">Total Presença Membros Mensal</td>
          <td width="200" align="center">Total Falta Membros Mensal</td>
        </tr>   
              <?php do{ ?>
        <tr align="center">       
        <!-- Imprimi a quantidade de alunos e as frequências -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']; ?></td>          
          <!-- **********************************************************************
          ****************************************************************************
          AQUI ESTÁ O PROBLEMA, NÃO ESTOU CONSEGUINDO FAZER APARECER A PRESENÇA DAS OUTRAS DATAS -->
		  <?php $countP=; $countF=;?> 
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>     
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Resultado:

OBS: No meu banco já estou conseguindo preencher as frequências normalmente, agora estou no passo de gerar os relatórios das mesmas.


Resultado Esperado:

Meu objetivo era fazer um relatório mensal de frequência como este no Excel:

Meus Banco de Dados:

Ø  MEMBRO

·         Cod_membro

·         Nome

·         ... (informações em gerais)

·         Cod_celula

Ø  Célula

·         Cod_celula

·         Nome

Ø  Frequência

·         Cod_frequencia

·         Data

·         ...(Informações em gerais)

·         Cod_celula

Ø  Membro_Frequência

·         Cod_membro

·         Presença (0=F;1=P)

·         Cod_frequencia

 

(Tentei resumir a dúvida o máximo que pude, desculpe pelo tamanho do POST)

Consultas:

mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_membros = sprintf("SELECT * FROM membro WHERE cod_celula = %s", GetSQLValueString($colname_rs_membros, "int"));
$rs_membros = mysql_query($query_rs_membros, $ChurchApp) or die(mysql_error());
$row_rs_membros = mysql_fetch_assoc($rs_membros);
$totalRows_rs_membros = mysql_num_rows($rs_membros);

mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_relatorio = sprintf("SELECT membro.nome, frequencia.cod_frequencia, frequencia.data, membro_frequencia.presenca FROM membro,
 frequencia, membro_frequencia WHERE frequencia.cod_celula = %s AND membro.cod_membro = membro_frequencia.cod_membro AND
  MONTH(frequencia.data) = 05 AND membro_frequencia.cod_frequencia = frequencia.cod_frequencia",
 GetSQLValueString($colname_rs_relatorio, "int"));

$query_rs_datas_frequencia = sprintf("SELECT frequencia.data FROM frequencia WHERE cod_celula = %s and MONTH(frequencia.data) = 05",
 GetSQLValueString($colname_rs_datas_frequencia, "int"));

 

2.png

3.png

Editado por rafaelduarte
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Oi Rafael!

Se o que você precisa é somar as presenças e ausências, partindo da idéia de que 'presenca' = 0 é ausência, acrescente na sua query de busca:

SUM(IF(presenca=1,1,0)) as presencas, SUM(IF(presenca=0,1,0)) as ausencias

Obs.: No trecho que você enviou não dá pra ver onde a variável $rs_relatorio foi criada;

Você está tentando usá-la em: mysql_fetch_array($rs_relatorio);

Link para o comentário
Compartilhar em outros sites

  • 0

@wash Obrigado por responder!

Na verdade meu problema está em CRIAR/ARRUMAR a tabela para apresentar os dados salvos no banco de dados;

Segue o trecho onde está a variável $rs_relatório;

$colname_rs_relatorio = "-1";
if (isset($_GET['cod_celula'])) {
  $colname_rs_relatorio = $_GET['cod_celula'];
}
mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_relatorio = sprintf("SELECT membro.nome, frequencia.cod_frequencia, frequencia.data, membro_frequencia.presenca FROM membro, frequencia, membro_frequencia WHERE frequencia.cod_celula = %s AND membro.cod_membro = membro_frequencia.cod_membro AND  MONTH(frequencia.data) = 05 AND membro_frequencia.cod_frequencia = frequencia.cod_frequencia", GetSQLValueString($colname_rs_relatorio, "int"));
$rs_relatorio = mysql_query($query_rs_relatorio, $ChurchApp) or die(mysql_error());
$row_rs_relatorio = mysql_fetch_assoc($rs_relatorio);

if (isset($_GET['totalRows_rs_relatorio'])) {
  $totalRows_rs_relatorio = $_GET['totalRows_rs_relatorio'];
} else {
  $all_rs_relatorio = mysql_query($query_rs_relatorio);
  $totalRows_rs_relatorio = mysql_num_rows($all_rs_relatorio);
}


Minha tabela tinha que ficar exatamente como está o exemplo via Excel;

Vou fazer uma consulta do banco de dados e postar aqui;

SELECT * FROM `membro_frequencia`

cod_membro presenca cod_frequencia  
1 1 1
5 1 1
11 1 1
120 1 1
125 1 1
131 1
1 1 2
5 1 2
11 1 2
120 2
125 2
131 2

... (E por ai vai)

 

O que não estou conseguindo fazer é aparacer essas presenças em formato de tabela;

Exemplo:
Nome - Data1 - Data2 - Data 3 ...
Fulano -   P    -     P     -    F 
Ciclano -  P    -     F      -    P
Beltrano- F    -      P     -    F

As soma é o próximo passo...

Link para o comentário
Compartilhar em outros sites

  • 0

Ôppa! Creio que agora entendi!

Onde presenca = 1 você quer exibir a letra P, onde não for, você precisa exibir a letra F

Use um if na sua query assim: (IF(presenca=1,'P','F')) as presenca

 

Link para o comentário
Compartilhar em outros sites

  • 0

Só lembrando que há muitos anos que o php.net recomenda que não se use as extensões mysql_* nunca mais!

mysql_.jpg

Se seu php ainda não está nem na versão 5, atualize!

Link para o comentário
Compartilhar em outros sites

  • 0

@wash Essa parte eu consegui de boa;

Meu problema específico é imprimir as colunas respectivas as datas; Mesmo se eu fizer um laço de repetição ele apenas vai Replicar a 1ª coluna de valores;

        <!-- Imprimi a quantidade de alunos e as frequências -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']; ?></td>          
          <!-- **********************************************************************
          ****************************************************************************
          AQUI ESTÁ O PROBLEMA, NÃO ESTOU CONSEGUINDO FAZER APARECER A PRESENÇA DAS OUTRAS DATAS -->
		  <?php $countP=; $countF=;?> 
          
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>     
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>  
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>
                         
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Olha como ficou agora:
Só que as outras datas estão apenas repetindo a primeira, teria que saber como eu faço para elas não repetirem e pegar as frequências das respectivas datas.

5.png

@lowys Puxa cara, não sabia disso. Vou me atentar para corrigir essa falha;

Você tem uma indicação do que usar para substituir a extensão Mysql_ (Site, apostilas, vídeo-aula etc.) ?
De qualquer forma, obrigado pela dica vou pesquisar mais sobre o assunto.

Link para o comentário
Compartilhar em outros sites

  • 0

@wash Acredito ter conseguido a solução:

Contém com a ajuda de um amigo desenvolvedor web;

A lógica foi assim:

Uma nova consulta SQL a cada nova linha de Membros; A cada linha de Membros eu tenho um 'COD_MEMBRO', Então esse resultado eu uso para fazer a nova QUERY
Em nova SQL eu consultei as frequências de um único membro; e Mandei imprimir com o laço de repetição limitando na quantidade de DATAS (Colunas) disponíveis;

SELECT f.data, mf.presenca, mf.cod_membro FROM frequencia as f inner join membro_frequencia as mf on f.cod_frequencia = mf.cod_frequencia and mf.cod_membro = $VARIAVEL and MONTH(f.data) = 05
 
Resultado da Variavel -> COD_MEMBRO = 1
data presenca cod_membro  
2016-05-04 1 1
2016-05-03 1 1
2016-05-05 1 1

CÓDIGO:

      <table width="600" border="1" cellspacing="5" bgcolor="#FFFFFF">
        <tr align="center">
          <td width="400" align="center">Nome:</td>
         
          <!-- Repetição para aparecer todas as datas que contém frequência de uma determinada célula-->
          <!-- Imprimi a data na respectiva linha -->
         <?php do{?>
          <td align="center"><?php echo date('d/m/Y',strtotime($row_rs_datas_frequencia['data'])); ?></td>
          <?php }while($row_rs_datas_frequencia = mysql_fetch_assoc($rs_datas_frequencia))?>
          <td width="200" align="center">Total Presença Membros Mensal</td>
          <td width="200" align="center">Total Falta Membros Mensal</td>
        </tr>  
        <!-- Laço para as linhas da Tabela --> 
              <?php do{ ?>
        <tr align="center">       
        <!-- Imprimi o membro na respectiva linha -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']?></td>
          
		  <?php $countP=; $countF=; $count=;?> 
          
          <?php
		  mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_linha_membro = sprintf("SELECT f.data, mf.presenca, mf.cod_membro FROM frequencia as f inner join membro_frequencia as mf on f.cod_frequencia = mf.cod_frequencia and mf.cod_membro = %s and MONTH(f.data) = 05", GetSQLValueString($row_rs_membros['cod_membro'], "int"));
$rs_linha_membro = mysql_query($query_rs_linha_membro, $ChurchApp) or die(mysql_error());
$row_rs_linha_membro = mysql_fetch_assoc($rs_linha_membro);
$totalRows_rs_linha_membro = mysql_num_rows($rs_linha_membro);  
		   ?>
           
           <!-- Imprimi a presença do membro na respectiva linha, com Base na consulta feito a partir do COD_MEMBRO (do laço de repetição) -->
           <?php do{?>
            <td align="center"> <?php //echo "CodMembro:".$row_rs_linha_membro['cod_membro']." Data:".$row_rs_linha_membro['data']." Presen:"; ?>
			<?php if($row_rs_linha_membro['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} ?></td>          
        <?php $row_rs_linha_membro = mysql_fetch_assoc($rs_linha_membro); ?>
        
        <!-- Imprimi a presença do membro na respectiva linha, com o limite de DATAS disponíveis -->
		   <?php $count++; }while($count<$totalRows_rs_datas_frequencia)?>  
               
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
        <!-- (Repetição) Voltar a imprimir as linhas enquanto tiver membros -->
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Resultado Tabela em Anexo:
 

Desculpem, esqueci de anexar as imagens do resultado;

6.png

7.png

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...