Estrutura de repetição e armazenamento em array com php

10/10/2017

0

Galera, em meu site de provas, o usuário escolhe determinadas provas, de determinadas matéria(ex: provas de matemática, portugues) e a faz, que vão para um histórico, na qual ele pode ver. Já o professor quando loga, poderia ver a média de cada matéria (ex: porcentagem de acertos de matematica, porcentagem de acertos de portugues). Porém para isso eu teria que selecionar as provas que eu quisesse no banco com uma variavel ($prova = 'prova de matematica') que acessaria o banco e traria todos os dados. Após isso, faria uma média dessas matérias para mostrar ao professor. Minha pergunta é: Como eu faria isso com array e while ?

$prova = "prova de matematica";
$res = ("SELECT nomeProva, porcentagemDeAcertosUsuario FROM histórico where nomeProva = '$prova'");

//montando a table
echo '
<table>
<tr>
<td><h1>Matéria: </td>
<td><h1>Média dos usuários: </td>
</tr></h1>';

//executando o comando while
while($escrever=mysql_fetch_array($res)){
echo '<tr>
<td>' . $escrever['nomeProva'] . '</td>
<td>' . $escrever['porcentagemDeAcertosUsuario'] . '</td>
</tr>';
}
echo '</table>';

Assim estou conseguindo trazer todos os dados do banco de determinada matéria com while, mas não consigo desenvolver um código que veja o número de pessoas que fizeram a matéria e fazer uma média dessa matéria entre os usuários que a fizeram.
Vinicius

Vinicius

Responder

Post mais votado

16/10/2017

Se entendi bem, a sua coluna porcentagemDeAcertosUsuario na verdade está armazenando o resultado de todas as provas certo?

Se sim, você pode adicionar um apelido a esta coluna e executar a função: sum().

Ficaria algo +- assim: "SELECT nomeProva, sum(porcentagemDeAcertosUsuario) as TOTAL FROM histórico where nomeProva = '$prova'";

Dentro da sua while substitua:
<td>' . $escrever['porcentagemDeAcertosUsuario'] . '</td>
por
<td>' . ($escrever['TOTAL'] * 0.100) . '</td>

Se entendi bem, a função sum vai somar todos os resultados que a query obteve daquele ID que foi passado, e no código você faria a multiplicação por 100.

Espero ter ajudado

Bons códigos!

Rafael Castro

Rafael Castro
Responder

Mais Posts

17/10/2017

Alex William

Cara, posso te dar uma ideia:

Faça uma tabela que guarde o id do aluno, o id da prova e a % de acertos dele.

Porque dessa forma?

Porque dessa forma vc pode selecionar mais dados, como media por prova, media por aluno, aluno que acertou mais geral, aluno que acertou mais por prova e também pode usar pra impedir que um aluno faça a mesma prova novamente.

Por exemplo, impedindo o aluno de fazer a mesma prova:

Quando o aluno tentasse acessar a prova, o sistema verificaria se o id do aluno ja ta cadastrado com a respectiva prova, se sim, ja mostrava que ele ja fez a prova:
$query = "SELECT * FROM tabelaProvaAluno WHERE id_aluno='IdAluno' AND id_prova='IdProva'";
$query = mysql_query($query);


depois:
if(mysql_num_rows($query)>0)
{
echo "Você já fez essa prova!";
}


Outro Exemplo:
Ver quem teve maior % de acertos geral:

$query = "SELECT * FROM tabelaProvaAluno ORDER BY procentagem_acertos ASC"



Resumindo, com uma tabela auxiliar pra isso você consegue exibir mais estatisticas pro professor depois.

Espero ter ajudado. :D
Responder

17/10/2017

Vinicius

Se entendi bem, a sua coluna porcentagemDeAcertosUsuario na verdade está armazenando o resultado de todas as provas certo?

Se sim, você pode adicionar um apelido a esta coluna e executar a função: sum().

Ficaria algo +- assim: "SELECT nomeProva, sum(porcentagemDeAcertosUsuario) as TOTAL FROM histórico where nomeProva = '$prova'";

Dentro da sua while substitua:
<td>' . $escrever['porcentagemDeAcertosUsuario'] . '</td>
por
<td>' . ($escrever['TOTAL'] * 0.100) . '</td>

Se entendi bem, a função sum vai somar todos os resultados que a query obteve daquele ID que foi passado, e no código você faria a multiplicação por 100.

Espero ter ajudado

Bons códigos!

Cara muito obrigado, estou a semanas atrás disso e não havia conseguido, não tens noção de como me ajudou! Porém esse código está somando as porcentagens e não fazendo uma média entre elas sabe ? No caso eu queria soma-las (como você fez) e dividir pelo número de provas de determinada matéria. O código ficou assim:
<?php

	$email = $_SESSION['logado'];
	$connect = mysql_connect('localhost','root','');

    $db = mysql_select_db('eenemp');

	$prova = "prova de matematica";
	$res = mysql_query("SELECT nomeProva, sum(porcentagemDeAcertosUsuario) as TOTAL FROM historico where nomeProva = '$prova'"); 

	echo '<table style="width:100%">
	<tr>
	<td><h1>Matéria: </td>
	<td><h1>Média dos usuários: </td>
	</tr></h1>';
	
	while($escrever=mysql_fetch_array($res)){

	echo 	'<tr>
	<td>' . $escrever['nomeProva'] . '</td> 
	<td>' . ($escrever['TOTAL'] * 0.100) . '</td> /// Aqui ao invés de apenas somar queria fazer uma média, percorrendo o número de linhas da prova de matématica($prova que eu passo o paramentro direto para a váriavel e ela pega no banco de dados), e pegando esse valor e dividindo pela soma, mas não sei fazer isso, percorrer e pegar o número de linhas.
Por exemplo se tem quatro registros da prova de matematica, somaria todas as porcentagens e dividiria por 4, assim fazendo uma média e a exibindo.
			</tr>';
}

Se conseguir me ajudar nisso também serei muito grato pois é a única coisa que falta para meu tcc. Porém desde já agradeço e muito, pois não tinha nem ideia de onde começar! Muito obrigado mesmo!
Responder

17/10/2017

Vinicius

Cara, muito obrigado. Isso é muito mais simples e muito mais prático, não sei como não havia pensado nisso ainda! Obrigado incrível ideia e pela compreensão, tudo de bom e muito sucesso... Que o tcc me aguarde!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar