liviasam 1 Denunciar post Postado Março 29, 2014 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
-=Érico=- 5 Denunciar post Postado Março 29, 2014 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
liviasam 1 Denunciar post Postado Março 29, 2014 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
-=Érico=- 5 Denunciar post Postado Março 29, 2014 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
Marcos Xavier 189 Denunciar post Postado Março 29, 2014 Na verdade a modelagem do banco não está legal não. Reveja as entidades do seu banco, especialmente a notas Compartilhar este post Link para o post Compartilhar em outros sites
liviasam 1 Denunciar post Postado Março 29, 2014 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
liviasam 1 Denunciar post Postado Março 29, 2014 É 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
Marcos Xavier 189 Denunciar post Postado Março 30, 2014 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