Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou com um desafio em mãos e preciso que vcs me ajudem.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img199.imageshack.us/img199/6948/tabelaou.jpg&key=e3814bfeb745e19b8297851bec6e8639fad3eab9b148646aab121835e19d9b60" alt="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?
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>';
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>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 =)
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.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img706.imageshack.us/img706/2539/tabelarz.jpg&key=0624261332bd7051dae5172178cacb04614e74d06d0aab39324469261f415ad1" alt="tabelarz.jpg" />
consegue entender?
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...
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.
Seguinte, fiz uma View e nessa tabela virtual esta todos os dados que eu preciso.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img143.imageshack.us/img143/9901/viewk.jpg&key=9ea9969096c5a02d526f3a8dca4ec4cee91855ada9d4838c268010010f2e207b" alt="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é.
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>
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.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img36.imageshack.us/img36/6654/tabelalc.jpg&key=d53b2f330373e025c89610649aeaf3470465f98783268cecdfc3d779177ce200" alt="tabelalc.jpg" />
Usei apenas alguns dados da tabela, mas seguiria no mesmo esquema para os demais campos.
A segunda parte eu colocarei aqui em breve.