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

HTML

JavaScript

PHP

10/10/2017

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

Curtidas 0

Melhor post

Rafael Castro

Rafael Castro

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!
GOSTEI 1

Mais Respostas

Michel

Michel

10/10/2017

Olá Sir / Sra
Nós oferecemos nossos serviços para pessoas honestas que estão em necessidade de apoio financeiro ou atividades geradoras de renda e criar um futuro melhor com uma taxa de juros de 2% considerado.
Eu diria que estou pronto para dar ao indivíduo.
Oferecemos-lhe empréstimos entre particular, de 5.000 € para 10.000.000 € para termos muito simples.
Estou disponível e disposto a discutir todas as suas necessidades financeiras nas seguintes áreas:

-Empréstimos imobiliários
-Empréstimos de investimento
-Auto empréstimo
-Consolidação da dívida
-Linha de crédito
-Segundas hipotecas
-Resgate de crédito
-Empréstimos pessoais

Não hesite em contactar-nos se você estiver interessado, o período de reembolso entre um para cada ano de acordo com a soma emprestada.
Nossos termos de empréstimo são:

- Um formulário para preencher.
- Um acordo de empréstimo deve ser feita pelo nosso notário
- Nossos empréstimos estão sujeitos a juros de 2% ao ano.
- Nossos empréstimos são normalmente pagos por cheque ou transferência bancária.

Me contactado por mail: michelalbertplanq@outlook.fr
No refrão sério!
GOSTEI 0
Alex William

Alex William

10/10/2017

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
GOSTEI 1
Vinicius

Vinicius

10/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!

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!
GOSTEI 0
Vinicius

Vinicius

10/10/2017

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!
GOSTEI 1
POSTAR