Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

weslley clyton

Criar matriz dinamica html

Recommended Posts

Olá, estou com um desafio em mãos e preciso que vcs me ajudem.

 

tabelaou.jpg

 

Essa é uma tabela feita no Excel, preciso montar uma identica com HTML, mas trazendo os dados do banco de dados.

Como vou fazer isso? alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comecei a responder à sua pergunta então me deparei com uma resposta mais complexa do que eu esperava, então decidi reformular a resposta em duas partes. Esta primeira parte focará em montar a tabela, a seguinte cuidará de colocar os dados na tabela a partir de um banco. Se a primeira parte já resolver seu problema (e deve resolver neste primeiro momento, pra ter algo para exibir no site logo), ótimo! Mas a segunda é uma solução mais permanente e interagindo com o banco, como você disse que queria. Mas vou precisar saber como estas informações estão salvas em banco, quais as estruturas das tabelas que armazenam os dados que você quer mostrar. Fiz um exemplo (que publicarei a seguir) com tabelas que eu criei chutando aqui, mas seria mais eficiente fazer algo baseado no seu problema.

 

Para criar uma tabela em HTML, você vai precisar da tag table. Sei que dizem para não usar tabelas em sites, mas este é um daqueles casos em que é para usar tabela e não uma outra estrutura qualquer.

tabelalc.jpg

<table border="1" width="70%">
<tr style="background:#FFFF00;">
<td colspan="6">Romaneio Numérico de Botina (MASC) (Of. e Praça)</td>
</tr>
<tr>
<td>Posto/Graduação</td>
<td>39</td>
<td>40</td>
<td>41</td>
<td>42</td>
<td>Total</td>
</tr>
<tr>
<td>Capitão</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</tb>
</tr>
<tr>
<td>Subtenente</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</tb>
</tr>
<tr>
<td>Sargento</td>
<td>3</td>
<td>0</td>
<td>3</td>
<td>3</td>
<td>9</tb>
</tr>
<tr>
<td>Cabo</td>
<td>1</td>
<td>3</td>
<td>1</td>
<td>2</td>
<td>7</tb>
</tr>
<tr>
<td>TOTAL</td>
<td>4</td>
<td>5</td>
<td>4</td>
<td>5</td>
<td>18</td>
</tr>
</table>

 

Usei apenas alguns dados da tabela, mas seguiria no mesmo esquema para os demais campos.

 

A segunda parte eu colocarei aqui em breve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, desculpa a montagem "feia" do HTML, fiz correndo aqui.

 

Mas a idéia é você criar uma matriz multidimensional exatamente do mesmo jeito que você vê no Excel:

 

$data = array( array( 'Posto',   36, 37, 38, 39, 40, 'Total' ),
              array( "Cel",      0,  0,  0,  0,  0, NULL ),
              array( "Ten Cel",  0,  0,  0,  0,  0, NULL ),
              array( "Major",    0,  0,  0,  0,  0, NULL )
            );

Depois, com um loop (dois na verdade, um dentro do outro), você monta a saída:

 

// Iniciando a Tabela

print '<table border="1">' . PHP_EOL;

printf( '<tr>%s<td>%s</td>%s</tr>%s', PHP_EOL, implode( '</td>' . PHP_EOL . '<td>', $data[ 0 ] ), PHP_EOL, PHP_EOL . PHP_EOL );

foreach( $data as $index => &$table ) {

   // Ignora o primeiro grupo, de cabeçalho

   if( $index == 0 ) { continue; }

   // Preenchendo Totais Automaticamente

   $table[ 6 ] = array_sum( array_slice( $table, 1 ) );

   // Montando a Tabela

   $length = count( $table );

   print '<tr>';

   for( $i = 0; $i < $length; $i += 1 ) {

       printf( '<td>%s</td>%s', $table [ $i ], PHP_EOL );
   }

   print '</tr>';
}

// Encerrando a Tabela

print '</table>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimenta isso...

 

 


CREATE TABLE `tab_romaneio_numerico_de_botina` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
`categoria` VARCHAR( 80 ) NULL,
`val36` INT( 11 ) NULL,
`val37` INT( 11 ) NULL,
`val38` INT( 11 ) NULL,
`val39` INT( 11 ) NULL,
`val40` INT( 11 ) NULL,
`val41` INT( 11 ) NULL,
`val42` INT( 11 ) NULL
);


<table border="1" width="70%">
<tr style="background:#FFFF00;">
<td colspan="9">Romaneio Numérico de Botina (MASC) (Of. e Praça)</td>
</tr>
<tr>
<td>Posto/Graduação</td>
<td>36</td>
<td>37</td>
<td>38</td>
<td>39</td>
<td>40</td>
<td>41</td>
<td>42</td>
<td>Total</td>
</tr>
<?php 
$query_val = mysql_query("Select * from tab_romaneio_numerico_de_botina "););

$total_registros=mysql_num_rows($query_val);

while($rs_val=mysql_fetch_array($query_val)){

$categoria=$rs_val['categoria']; 
$val36=$rs_val['val36']; 
$val37=$rs_val['val37'];
$val38=$rs_val['val38'];
$val39=$rs_val['val39']; 
$val40=$rs_val['val40'];  
$val41=$rs_val['val41'];  
$val42=$rs_val['val42']; 

$subtotal=$val36+$val37+$val38+$val39+$val40+$val41+$val42;
$total=$total+$subtotal;

$totalCol[1]=$totalCol[1]+$val36;
$totalCol[2]=$totalCol[2]+$val37;
$totalCol[3]=$totalCol[3]+$val38;
$totalCol[4]=$totalCol[4]+$val39;
$totalCol[5]=$totalCol[5]+$val40;
$totalCol[6]=$totalCol[6]+$val41;
$totalCol[7]=$totalCol[7]+$val42;
?>
<tr>
 <td><?php echo $categoria; ?></td>
 <td><?php echo $val36; ?></td>
 <td><?php echo $val37; ?></td>
 <td><?php echo $val38; ?></td>
 <td><?php echo $val39; ?></td>
 <td><?php echo $val40; ?></td>
 <td><?php echo $val41; ?></td>
 <td><?php echo $val42; ?></td>
 <td><?php echo $subtotal; ?></td>
</tr>
<?php
}//fecha while valores das botinas

?>
<tr><td>TOTAL</td>
 <?php for ($x=1; $x<=7; $x++){ ?>
 <td><?php echo $totalCol[$x]; ?></td>
  <?php 
  } //fecha for
  ?>
 <td><?php echo $total ?></td>
</tr>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, ta escorrendo lagrimas aqui! ahsuhauahsas

Fiz essa mesma pergunta em outros foruns tbm, e só obtive respostas "toscas", quem olha pra pergunta superficialmente acha que é uma coisa simples, quando na realidade é bem complexo. Sua lógica foi maravilhosa, vou tentar implementar aqui no sistema, qualquer coisa posto aqui!

Muito obrigado =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, ainda nao consegui resolver o problema, vou postar aqui minhas tabelas.

 

CREATE TABLE IF NOT EXISTS `pessoa` (

`id` int(8) NOT NULL auto_increment,

`id_romaneio` int(8) NOT NULL,

`id_pesoa_curso` int(8) default NULL,

`id_sessao` int(4) NOT NULL,

`id_unidade_trabalho` int(4) NOT NULL,

`id_cidade` int(4) NOT NULL,

`id_graduacao` int(4) NOT NULL,

`data` date NOT NULL,

`nome` varchar(100) NOT NULL,

`sexo` char(1) NOT NULL,

`nascimento` date NOT NULL,

`nome_guerra` varchar(100) default NULL,

`cpf` varchar(14) NOT NULL,

`rg` varchar(14) NOT NULL,

`tit_eleitor` varchar(12) default NULL,

`num_habilitacao` varchar(12) default NULL,

`cat_habilitacao` varchar(2) NOT NULL,

`endereco` varchar(100) NOT NULL,

`bairro` varchar(100) NOT NULL,

`cep` varchar(10) NOT NULL,

`telefone` varchar(14) NOT NULL,

`celular` varchar(14) default NULL,

`senha` varchar(20) NOT NULL,

`nivel` int(1) NOT NULL,

`status` char(1) NOT NULL,

PRIMARY KEY (`id`)

)

 

 

 

CREATE TABLE IF NOT EXISTS `tamanho_produto` (

`id` int(8) NOT NULL auto_increment,

`id_pessoa` int(8) NOT NULL,

`id_fardamento` int(8) NOT NULL,

`id_produto` int(8) NOT NULL,

`tamanho` varchar(10) default NULL,

PRIMARY KEY (`id`)

)

 

CREATE TABLE IF NOT EXISTS `graduacao` (

`id` int(4) NOT NULL auto_increment,

`nome` varchar(50) NOT NULL,

`data` date NOT NULL,

`status` char(1) NOT NULL,

PRIMARY KEY (`id`)

)

 

na tabela do html será o seguinte.

 

tabelarz.jpg

 

 

consegue entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer seu SELECT, com ou sem alguma manipulação com PHP, retornar a estrutura como demonstrei acima.

 

Se você tiver dificuldades em gerar aquela estrutura, experimente fazer um print_r() (dentro de uma tag <pre>) para ver como que os dados ficam.

 

Pode parecer (e de fato é), bem estranho, mas quando você olha por outro ângulo, como o que eu demonstrei, fica tudo muito claro.

 

Esse formato eu tirei da antiga versão do PHP SWF Charts, que trabalhava com arrays. Agora é só com XML, mas não vem ao caso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra, já testei várias formas para tentar colocar o resultado do banco na estrutura que você me passou, mais foram todas tentativas fracassadas, eu estou travando na hora de colocar os dados no array.

 

por exemplo

 

$data = array( array( 'Posto', 36, 37, 38, 39, 40, 'Total' ),

array( "Cel", 0, 0, 0, 0, 0, NULL ),

array( "Ten Cel", 0, 0, 0, 0, 0, NULL ),

array( "Major", 0, 0, 0, 0, 0, NULL )

);

 

os tamanhos são dinamicos, como é que eu vou colocar um while dentro de um array?

 

Isso que está sendo complicado de entender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, fiz uma View e nessa tabela virtual esta todos os dados que eu preciso.

 

viewk.jpg

 

Agora como é que eu vou jogar esses dados naquele array? Minha cabeça não ta funcionando direito, to travado kra!

 

preciso que essses dados ai preencham aquela tabela. Até.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha cara...não sei qual sua dúvida, mas aqui funcionou perfeitamente, veja você mesmo...

SQL:

DROP TABLE IF EXISTS `tab_romaneio_numerico_de_botina`;
CREATE TABLE `tab_romaneio_numerico_de_botina` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `categoria` varchar(80) DEFAULT NULL,
 `val36` int(11) DEFAULT NULL,
 `val37` int(11) DEFAULT NULL,
 `val38` int(11) DEFAULT NULL,
 `val39` int(11) DEFAULT NULL,
 `val40` int(11) DEFAULT NULL,
 `val41` int(11) DEFAULT NULL,
 `val42` int(11) DEFAULT NULL,
 `val43` int(11) DEFAULT NULL,
 `var44` int(11) DEFAULT NULL,
 `var45` int(11) DEFAULT NULL,
 `var46` int(11) DEFAULT NULL,
 `var47` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (1,'Cel',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (2,'Ten Cel',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (3,'Major',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (4,'Capitão',NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (5,'Tenente',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (6,'Asp. Of.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (7,'Subtenente',NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (8,'Sargento',NULL,NULL,1,3,NULL,3,3,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (9,'Cabo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `tab_romaneio_numerico_de_botina` VALUES (10,'Soldado',NULL,NULL,NULL,6,7,2,5,NULL,NULL,NULL,1,NULL);

 

página PHP...

<?php

$servidor_sistema='localhost';
$usuario_sistema='root';
$senha_sistema='1234';
$banco_sistema='test';
$total_colunas_registros=12;
$conexao = mysql_connect($servidor_sistema, $usuario_sistema, $senha_sistema) or die("Erro na conexao [$servidor_sistema]: ".mysql_error());
$selecao = mysql_select_db($banco_sistema) or die("Erro no Banco [$banco_sistema]: ".mysql_error());

?>
<table width="70%" border="1" bordercolor="#000000">
<tr style="background:#FFFF00;">
<td colspan="<?php echo $total_colunas_registros+3;?>"><div align="center">Romaneio Numérico de Botina (MASC) (Of. e Praça)</div></td>
</tr>
<tr>
<td>Posto/Graduação</td>
<td>36</td>
<td>37</td>
<td>38</td>
<td>39</td>
<td>40</td>
<td>41</td>
<td>42</td>
<td>43</td>
<td>44</td>
<td>45</td>
<td>46</td>
<td>47</td>
<td>Total</td>
</tr>
<?php 
$query_val = mysql_query("Select * from tab_romaneio_numerico_de_botina ");

$total_registros=mysql_num_rows($query_val);

while($rs_val=mysql_fetch_array($query_val)){

$categoria=$rs_val['categoria']; 
$val36=$rs_val['val36']; 
$val37=$rs_val['val37'];
$val38=$rs_val['val38'];
$val39=$rs_val['val39']; 
$val40=$rs_val['val40'];  
$val41=$rs_val['val41'];  
$val42=$rs_val['val42']; 
$val43=$rs_val['val43']; 
$val44=$rs_val['val44']; 
$val45=$rs_val['val45']; 
$val46=$rs_val['val46']; 
$val47=$rs_val['val47']; 

$subtotal=$val36+$val37+$val38+$val39+$val40+$val41+$val42+$val43+$val44+$val45+$val46+$val47;
$total=$total+$subtotal;

$totalCol[1]=$totalCol[1]+$val36;
$totalCol[2]=$totalCol[2]+$val37;
$totalCol[3]=$totalCol[3]+$val38;
$totalCol[4]=$totalCol[4]+$val39;
$totalCol[5]=$totalCol[5]+$val40;
$totalCol[6]=$totalCol[6]+$val41;
$totalCol[7]=$totalCol[7]+$val42;
$totalCol[8]=$totalCol[8]+$val43;
$totalCol[9]=$totalCol[9]+$val44;
$totalCol[10]=$totalCol[10]+$val45;
$totalCol[11]=$totalCol[11]+$val46;
$totalCol[12]=$totalCol[12]+$val47;
?>
<tr>
 <td><?php echo $categoria; ?></td>
 <td><?php if($val36!='')echo $val36; ?> </td>
 <td><?php echo $val37; ?> </td>
 <td><?php echo $val38; ?> </td>
 <td><?php echo $val39; ?> </td>
 <td><?php echo $val40; ?> </td>
 <td><?php echo $val41; ?> </td>
 <td><?php echo $val42; ?> </td>
 <td><?php echo $val43; ?> </td>
 <td><?php echo $val44; ?> </td>
 <td><?php echo $val45; ?> </td>
 <td><?php echo $val46; ?> </td>
 <td><?php echo $val47; ?> </td>
 <td><?php echo $subtotal; ?> </td>
</tr>
<?php
}//fecha while valores das botinas

?>
<tr><td>TOTAL</td>
 <?php for ($x=1; $x<=$total_colunas_registros; $x++){ ?>
 <td bgcolor="#CCCCCC"><?php echo $totalCol[$x]; ?> </td>
  <?php 
  } //fecha for
  ?>
 <td bgcolor="#CCCCCC"><?php echo $total ?> </td>
</tr>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.