Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho windows e linux no meu notebook rodando wamp e lamp respectivamente, porém o código abaixo só funciona no linux:
<!-- AGRUPADO POR MES/ANO -->
<table width="100%" class="tblGrid">
<th colspan="3">TOTAL POR MES/ANO</th>
<tr>
<td align="center"><b>MÊS/ANO</b></td>
<td align="center"><b>TOTAL</b></td>
<td align="center"><b>PERCENTUAL</b></td>
</tr>
<?php
$sql = "SELECT *, COUNT(*) AS total FROM viagens GROUP BY mes, YEAR(data) ORDER BY total DESC";
$query = mysql_query($sql);
while ($linha = mysql_fetch_array($query)) {
$data = explode("-",$linha['data']);
$ano = $data[0];
?>
<tr>
<td align="lefth"><?php echo strtoupper ($linha['mes'])."/".$ano; ?></td>
<td align="right"><?php echo $linha['total']; ?></td>
<td align="right"><?php echo round ((($linha['total'] / $total) * 100),2)." %";?></td>
</tr>
<?php
}
?>
<tr>
<td>TOTAL</td>
<td align="right"><?php echo $total; ?></td>
<td align="right"><?php echo round ((($total / $total) * 100),2)." %";?></td>
</tr>
</table>
<p />
<a href="javascript:abrir('gerar_grafico.php','1080','600','yes');">Gerar gráfico</a>
<br />
Esse código no windows retorna a seguinte mensagem:
Notice: Undefined variable: total in C:\wamp\www\includes\ait\pormesano.php on line 28
Como resolver? Parece que no windows não aceita o alias do COUNT(*).
Complementando, há duas formas de resolver:
1. usar $linha['total'] onde você usa $total
2. Atribuir $linha['total'] à variável $total antes de usá-la
PS: reforçando o que já foi citado, é sempre recomendado ativar todas as mensagens de erro do PHP em ambiente de desenvolvimento :thumbsup:
Seguindo o 2. Atribuir $linha['total'] à variável $total antes de usá-la, elimina a mensagem de erro mas a consulta não funciona como esperado. Era para retornar MES/ANO com o total e o seu percentual e na última linha o total geral de registros que corresponde a 100%.
Como fez? Qual foi o resultado exatamente?
No linux onde o código funciona tenho a seguinte tabela:
E no windows fazendo as alterações sugeridas tenho a seguinte tabela:
Eu testei aqui, e a unica coisa que tive de fazer antes foi setar o valor de $total para o total de todas as linhas. Depois disso o resultado saiu como o do linux.
E como você fez? O meu código está assim agora:
<!-- AGRUPADO POR MES/ANO -->
<table width="100%" class="tblGrid">
<th colspan="3">TOTAL POR MES/ANO</th>
<tr>
<td align="center"><b>MÊS/ANO</b></td>
<td align="center"><b>TOTAL</b></td>
<td align="center"><b>PERCENTUAL</b></td>
</tr>
<?php
$sql = "SELECT *, COUNT(*) AS total FROM viagens GROUP BY mes, YEAR(data) ORDER BY total DESC";
$query = mysql_query($sql);
while ($linha = mysql_fetch_array($query)) {
$data = explode("-",$linha['data']);
$ano = $data[0];
$total = $linha['total'];
?>
<tr>
<td align="lefth"><?php echo strtoupper ($linha['mes'])."/".$ano; ?></td>
<td align="right"><?php echo $linha['total']; ?></td>
<td align="right"><?php echo round ((($linha['total'] / $total) * 100),2)." %";?></td>
</tr>
<?php
}
?>
<tr>
<td>TOTAL</td>
<td align="right"><?php echo $total; ?></td>
<td align="right"><?php echo round ((($total / $total) * 100),2)." %";?></td>
</tr>
</table>
<p />
<a href="javascript:abrir('gerar_grafico.php','1080','600','yes');">Gerar gráfico</a>
<br />Para testar eu fiz assim:
<!-- AGRUPADO POR MES/ANO -->
<table width="100%" class="tblGrid">
<th colspan="3">TOTAL POR MES/ANO</th>
<tr>
<td align="center"><b>MÊS/ANO</b></td>
<td align="center"><b>TOTAL</b></td>
<td align="center"><b>PERCENTUAL</b></td>
</tr>
<?php
$query = array(
array('mes' => 'Janeiro', 'data' => '2010-10-10', 'total' => 10),
array('mes' => 'Fervereiro', 'data' => '2010-10-10', 'total' => 8),
array('mes' => 'Maio', 'data' => '2010-10-10', 'total' => 2),
);
$total = 20;
foreach ($query as $linha) {
$data = explode("-", $linha['data']);
$ano = $data[0];
?>
<tr>
<td align="lefth"><?php echo strtoupper($linha['mes']) . "/" . $ano; ?></td>
<td align="right"><?php echo $linha['total']; ?></td>
<td align="right"><?php echo round((($linha['total'] / $total) * 100), 2) . " %"; ?></td>
</tr>
<?php
}
?>
<tr>
<td>TOTAL</td>
<td align="right"><?php echo $total; ?></td>
<td align="right"><?php echo round((($total / $total) * 100), 2) . " %"; ?></td>
</tr>
</table>
<p />
<a href="javascript:abrir('gerar_grafico.php','1080','600','yes');">Gerar gráfico</a>
<br />Ok ExtremsX, mas do seu jeito funcionou porque você já definiu o valor da variável $total. No meu caso o problema está relacionado com o aliás que no windows dá erro pedindo para declarar a variável total.
$sql = "SELECT , COUNT() AS total FROM viagens GROUP BY mes, YEAR(data) ORDER BY total DESC";
O total que eu setei é diferente do total que está vindo do banco de dados, no seu caso você teria de fazer outro SELECT para ver o total geral
SELECT COUNT(*) AS total FROM viagens
Depois pegar esse total ai e colocar no $total
Olá
No código que você postou realmente a váriavel $total não foi declarada no PHP.
O que pode estar acontecento é que no linux a configuração do seu PHP está ignorando notícias (PHP Notice),
Tente isso no começo do arquivo, então no linux vai aparecer a mesma mensagem que no windows