Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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
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.
Na verdade a modelagem do banco não está legal não. Reveja as entidades do seu banco, especialmente a notas
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
É 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($l**ixo_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.
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".
Vamos tentar de novo. :P
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.