Ir para conteúdo

POWERED BY:

Arquivado

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

liviasam

Cálculo de média

Recommended Posts

Boa noite, estou tentando criar uma função no meu php para fazer a média de 4 notas. Consegui fazer a função, porém quando implemento ela só me passa a listar um aluno somente.



Tenho as funções abaixo que trazem os valores do banco das notas dadas:



<td align="center">

<?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?> 

</td>



<td align="center">

<?=@mysql_result(mysql_query("SELECT n2 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n2)?> 

</td>



<td align="center">

<?=@mysql_result(mysql_query("SELECT n3 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n3)?> 

</td>



<td align="center">

<?=@mysql_result(mysql_query("SELECT n4 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n4)?> 

</td>



Até aí está tranquilo, e lista todos os alunos. Mas agora criei um campo e criei uma função para fazer a média dessas 4 notas que estão no banco. A função abaixo:



<?php


$sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";

$media = mysql_query($sql);

while($linha=mysql_fetch_array($media))

{

$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;

echo $media;

}

?>




Quando eu coloco essa função ele faz o cálculo e insere a média no campo criado, mas ele passa a listar somente um aluno.


Já retirei a condição do aluno como falado, porém continua a listar somente 1 aluno.


O problema está nessa função, já tentei as seguintes formas como abaixo:



<?php


$sql = "SELECT * FROM notas";

$media = mysql_query($sql);

while($linha=mysql_fetch_array($media))

{

$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;

echo $media;

}

?>



Ou:



<?php


$sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] ";

$media = mysql_query($sql);

while($linha=mysql_fetch_array($media))

{

$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;

echo $media;

}

?>



Ou ainda:



<?php


$sql = "SELECT * FROM notas WHERE id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";

$media = mysql_query($sql);

while($linha=mysql_fetch_array($media))

{

$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4;

echo $media;

}

?>



Então o problema está unicamente na função que cria a média. Ou se tem outro método de se criar a média ou tenho de achar uma solução para esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos tentar de novo. :P

 

Colocar aquele código anterior, pra pegar as notas pelo menos use o código abaixo, assim você faz um SELECT só pra pegar as 4 notas, e não um SELECT por nota.

 

<?php
$sql = "SELECT n1, n2, n3, n4 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$res = mysql_query($sql);
$rs  = mysql_fetch_row($res);
?>

<td align="center"><?= $rs[0] ?></td><!-- Nota 1 -->
<td align="center"><?= $rs[1] ?></td><!-- Nota 2 -->
<td align="center"><?= $rs[2] ?></td><!-- Nota 3 -->
<td align="center"><?= $rs[3] ?></td><!-- Nota 4 -->
<td align="center"><?= ($rs[0] + $rs[1] + $rs[2] + $rs[3]) / 4 ?></td><!-- Media -->
Dessa maneira vai pegar a média das quatro notas anteriores e exibir a média.

 

Não está claro essa média que você quer fazer, talvez seja necessário colocar o código inteiro, eu estou presumindo que esse código está dentro de um loop que exibe todos alunos da série $_SESSION[id_serie], e para cada 4 notas você quer exibir a média logo em seguida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto a média eu consegui implantar com o que fiz anteriormente, a sua solução faz o mesmo. Porém o que acontece é que quando implemento a função da média a listagem dos alunos desaparece e só figura 1 apenas, se tirar a função que cria a média, volta todos.

 

A cada 4 notas a média teria de vir em seguida no próximo campo, ele faz isso, porém só fica figurando um aluno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, sem ver o código inteiro fica mais complicado, eu vou chutar o que pode ser.

Se você está usando a solução que você postou pode ser por que você tá colocando as notas na variavel $linha, e presumo que você está usando essa mesma variável para listar os alunos também, teria que usar variáveis diferentes. tipo $alunos e $notas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser Érico, vou dar uma revisada em tudo

 

Mas quanto as variáveis, estou usando diferentes, mas já coloquei até igual e nada, e também usei a sua solução que fez a médica correta, mas o problema de trazer somente um aluno continuou

Compartilhar este post


Link para o post
Compartilhar em outros sites

É amores, por isso as vezes fico chateada quando faço uma pergunta aqui e logo alguém vem postando link de manual php.

 

Como o nome já diz, FÓRUM, é para tirar dúvidas, que muitas vezes não está em manual algum. A dias com o problema, abri tópicos, ajuda de muitos, eu testei várias dicas, peguei outras de outros fóruns, troquei os métodos, fiz tudo que vários manuais indicavam e nada.

 

Código original que postei, que é o certo é correto, olhem em negrito

 

$sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$media = mysql_query($sql);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}
Alterando alguns valores, resolvi colocar $linha em tudo, e não é que não só a média continuou a funcionar como também retornou a listagem dos alunos. Aí fiquei fazendo testes, final abaixo:
$bunda = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$media = mysql_query($bunda);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}

 

 

Ou abaixo:

 

$lixo_de_php = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$media = mysql_query($lixo_de_php);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}
Desculpe o palavrão, mas só quis mostrar que o que não tem lógica funcionou. Qualquer palavra que eu coloque que não seja a variável que seria a correta funciona, mas a correta não. Manual iria me ajudar?
Bom, resolvido depois de eu quebrar muito a cabeça e chegar a conclusão que a solução não seria o correto. E meu conhecimento de php é um lixo. Pelo certo e por manuais não chegaria a solução, por erros e chutes acertei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal que você tenha conseguido, tenho certeza que você não terá mais dúvidas desse tipo, se ocorrer algo do parecido você estará apta para resolver.

Comparando com o primeiro post ,não consegui visualizar a alteração da parte que você postou por último.

 

Como o nome já diz, FÓRUM, é para tirar dúvidas, que muitas vezes não está em manual algum. A dias com o problema, abri tópicos, ajuda de muitos, eu testei várias dicas, peguei outras de outros fóruns, troquei os métodos, fiz tudo que vários manuais indicavam e nada.

 

Já passei por isso e não tem nada melhor para evoluir, do que quebrando a cabeça. Quando resolvemos o problema encontramos várias formas de "não fazer".

 

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.