Ir para conteúdo

POWERED BY:

Arquivado

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

Barbyzita

[Resolvido] Não consigo enviar respostas de alunos para o banco d

Recommended Posts

Bom, acabei escrevendo esse tópico em outro canto, posto q n sabia em qual lugar exibi-lo. Me desculpem, administradores... No entanto, gostaria q me auxiliassem... Vou copiar novamente oq já escrevi anteriormente:

 

Olá, programadores.

 

Bom, sou nova por aqui e tb no q diz respeito à linguagem PHP. Portanto, gostaria q me auxiliassem no q diz respeito a minha dúvida em relação à armazenar a pontuação de determinado aluno no banco de dados para, posteriormente, esta mesma pontuação ser visualizada pelo professor.

Estabeleci uma prova bem tosquinha, posto q o aplicativo encontra-se em fase de construção. Já desenvolvi os scripts para cadastro, visualização e exclusão de perguntas e respostas pelos administradores mas, qndo o aluno chega a resolver a prova e ter conhecimento de sua nota, n consigo enviar a pontuação para o banco de dados. Só gostaria de saber como faço para q isto aconteça, pq o resto, faço numa boa.

FICAREI MUITO GRATA SE PUDEREM ME AJUDAR!

Aqui está o script (enfatizo, mais uma vez, q encontra-se em construção) da prova online:

<?php
include ("conecta.php");
?>

<?php
if($_POST['confirmar']){
$pontos=0;
foreach($_POST AS $pergunta => $resposta){
	if($pergunta!="confirmar"){

		$sql="SELECT * from perguntas where id='$pergunta'";
		$resultado=mysql_query($sql) or die ("Impossível selecionar perguntas".mysql_error());
		while($linhas=mysql_fetch_array($resultado)){
			extract($linhas);

			echo "$pergunta<br>";
			if ($resposta=="$correta"){
				$pontos+=1;
				echo "<b>Resp.:</b> $resposta - <font color=green>Resposta correta!</font><br><br>";
			}else{
				echo "<b>Resp.:</b> $resposta - <font color=red>Resposta incorreta!</font><br><br>";
			}

		}
	}
}
echo "Total de <font color=blue>$pontos </font>ponto(s)";
}
?>

<form action="" method="POST">
<h4><center><font color=red><i>Responda as perguntas abaixo:</i></font></center></h4><p>
<h4><center><b>Cada questão vale</b> <font color=red>1,0</font><b> ponto</b></center></h4>
<br>

<?php

$sql="SELECT * from perguntas";
$resultado=mysql_query($sql) or die (mysql_error());
$contador=1;
while ($linhas=mysql_fetch_array($resultado)){
extract($linhas);
echo $contador++;
echo ". " . "<b>$pergunta</b><br>";
echo "<input type='radio' name='$id' value='$resposta1'>$resposta1<br>";
echo "<input type='radio' name='$id' value='$resposta2'>$resposta2<br>";
echo "<input type='radio' name='$id' value='$resposta3'>$resposta3<br>";
echo "<input type='radio' name='$id' value='$resposta4'>$resposta4<br>";
echo "<input type='radio' name='$id' value='$resposta5'>$resposta5<br><p>";
}
?>
<h4><center><b><font color=red>CERTIFIQUE-SE DE QUE RESPONDEU TODAS AS PERGUNTAS ANTES DE CONFIRMAR AS RESPOSTAS!</font></b></center></h4><p>
<div align="center"><center>
<p><input type="submit" name="confirmar" value="Confirmar respostas">
</center></div>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Barbyzita você poderia postar o seu arquivo de conexão ao banco e o script da tabela no banco de dados?

Coloquem ambos aí para que possamos entender melhor o seu problema.

 

No aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, seja bem vinda ao fórum.

 

Segundo lugar, seu outro tópico foi excluído. Poste somente uma vez e somente em um local. Caso esteja no local incorreto, faremos a movimentação.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, obrigada pelas boas-vindas. Pretendo ser uma participante ativa no fórum.

Em segundo lugar, oq está me "emperrando" é justamente o desenvolvimento das variáveis no banco de dados. Já especifiquei para coletar informações a respeito do código do aluno, sua resposta e a pontuação. Se vcs perceberem, o número de pontos aparece na própria página da prova, para visualização do aluno; no entanto, n estou conseguindo enviá-lo ao banco de dados. Já tentei de tudo, oq me deixa cada vez mais frustrada. A lógica é simples, porém, n consigo colocá-la em prática! Já coloquei insert into resultado_prova (codaluno, resposta, pontos) values ('$codaluno','$resposta','$pontos')"; mas permanece em 0 (zero). A única coisa q muda, obviamente, é o codprova.

Está td muito "nebuloso" para mim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Somente para deixar td mais "claro", só tenho 2 tabelas:

 

1ª: aluno

 

codaluno int(3) Não auto_increment

nomealuno varchar(50) latin1_swedish_ci Não

genero varchar(8) latin1_swedish_ci Não

endaluno varchar(256) latin1_swedish_ci Não

cpfaluno varchar(16) latin1_swedish_ci Não

rgaluno varchar(16) latin1_swedish_ci Não

username varchar(10) latin1_swedish_ci Não

senhaaluno varchar(8) latin1_swedish_ci Não

 

2ª perguntas

 

id int(3) Não auto_increment

pergunta longtext latin1_swedish_ci Não

resposta1 varchar(256) latin1_swedish_ci Não

resposta2 varchar(256) latin1_swedish_ci Não

resposta3 varchar(256) latin1_swedish_ci Não

resposta4 varchar(256) latin1_swedish_ci Não

resposta5 varchar(256) latin1_swedish_ci Não

correta varchar(256) latin1_swedish_ci Não

 

Desta forma, consigo cadastrar os alunos, as perguntas e as respostas corretas/incorretas. Já desenvolvi a prova com algumas perguntas para teste. Os alunos selecionam e têm sua pontuação. Como poderia estabelecer a conexão entre o banco de dados e o resultado de cada aluno, para posteriormente o professor ter acesso a este último? Simplesmente n estou conseguindo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Barbyzita.

 

Seguinte, não entendi muito bem a sua lógica, não sei se pode explicar melhor. Você disse que só tem duas tabelas...mas disse o sequinte:

 

Já coloquei insert into resultado_prova (codaluno, resposta, pontos) values ('$codaluno','$resposta','$pontos')"; mas permanece em 0 (zero). A única coisa q muda, obviamente, é o codprova.

 

Então você possui uma tabela resultado_prova tbm??

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza Barbyzita eu fiz aqui...do jeito que você passou e está ok, só tá faltando uma coisinha de acordo com a sua explicação.

Já tentei de tudo, oq me deixa cada vez mais frustrada. A lógica é simples, porém, n consigo colocá-la em prática! Já coloquei insert into resultado_prova (codaluno, resposta, pontos) values ('$codaluno','$resposta','$pontos')"; mas permanece em 0 (zero). A única coisa q muda, obviamente, é o codprova.

você disse que são apenas 2 tabelas correto, Que são:

Somente para deixar td mais "claro", só tenho 2 tabelas:1ª: aluno

 

codaluno int(3) Não auto_increment

nomealuno varchar(50) latin1_swedish_ci Não

genero varchar(8) latin1_swedish_ci Não

endaluno varchar(256) latin1_swedish_ci Não

cpfaluno varchar(16) latin1_swedish_ci Não

rgaluno varchar(16) latin1_swedish_ci Não

username varchar(10) latin1_swedish_ci Não

senhaaluno varchar(8) latin1_swedish_ci Não

 

2ª perguntas

 

id int(3) Não auto_increment

pergunta longtext latin1_swedish_ci Não

resposta1 varchar(256) latin1_swedish_ci Não

resposta2 varchar(256) latin1_swedish_ci Não

resposta3 varchar(256) latin1_swedish_ci Não

resposta4 varchar(256) latin1_swedish_ci Não

resposta5 varchar(256) latin1_swedish_ci Não

correta varchar(256) latin1_swedish_ci Não

Mas...pelo visto terão que ser 3 tabelas, que é a resultado_prova então...kd essa tabela e kd a parte do sistema que realiza a inserção do codigo do aluno, a resposta correta e o total de pontos?

 

Eu posso ter olhado errado mais, no codigo que você passou mais acima, tem apenas a parte onde você manda visualizar a Pergunta, a resposta correta e se estar correta ou incorreta e o total de ponto, mas não vi a parte onde manda inserir no banco, e outra... você quer que insira o codigo do aluno tambem, mas...onde e´que você busca o codigo do aluno?.

 

Enfim...você tem essa parte aí e a tabela resultado_prova, posta ela aí ok.

 

Abraços...e...no aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Roberto Silva,

 

De fato, EXISTIA uma tabela de nome resultado_prova. No entanto, como n consegui estipular as variáveis para recebimento dos dados escolhidos, acabei excluindo. E é justamente essa a minha dúvida. Não sei como fazer a conexão com o banco de dados, de acordo com as variáveis q foram adotadas no programa prova_dinamica.php.

Bom, definitivamente, não sei como explicar de outra maneira...

Por isso gostaria de uma "luz", pq, obviamente, estou deixando de utilizar algum código e/ou comando necessário para tal execução. Minha lógica pode até estar toda errada, entende? Não sou programadora ainda, estou apenas começando. Tenho muito a trilhar e meus conhecimentos em POO são bem básicos.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada a quem tentou me ajudar mas, já descobri oq faltava! Sinceramente, estou com ódio de mim mesma por n ter descoberto antes e demorado 2 dias para visualizar o óbvio:

 

Tabela: resultado_prova

 

codprova

pontos

 

e o código:

 

}

echo "Total de <font color=blue>$pontos </font>ponto(s)";

$sql="INSERT into resultado_prova (pontos) values ('$pontos')"; <= Isso q estava faltando! Simples assim!

mysql_query($sql,$conexao) or die (mysql_error());

}

 

?>

 

Agora irei estabelecer um código para armazenar a pontuação de cada aluno, individualmente. Ufaa... Já estava ficando maluca!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Carlos Eduardo,

 

Agora minha dificuldade é justamente essa...

Eu já havia especificado a chave primária "codaluno", no entanto, n consigo colocar esta variável no programa prova_dinamica.php, para q a mesma especifique o nome do aluno + a nota tirada. Só estou precisando disso para continuar com meu aplicativo...

Coloquei $codaluno=$_POST['codaluno']; no início do programa e n deu certo... Sei q terei q dar um loop depois e especificar os arrays [codaluno][pontos] mas, isso eu conseguirei posteriormente. Preciso só identificar e jogar o nome do aluno no banco de dados, juntamente com sua nota.

Estou até abusando mas, poderiam me ajudar? Tenho crédito pq a primeira dúvida foi tirada por mim. hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi...

 

Bom, eu vou dar a minha sugestão do que poderia ser feito, talvez você já esteja fazendo algo parecido.

 

Tipo, para realizar a prova o aluno teria q efetuar uma espécie de login, já que há o cadastro de alunos. Então ele entraria com seu login, ou então, nome completo, e senha. Ai na tela de verificação de login, gravaria a ID desse aluno em uma sessão. Então o aluno realizaria a prova normalmente, e na hora de cadastrar as respostas, cadastraria a id do aluno (na tabela resultado_prova) a partir da sessao gravada na hora do login.

 

Outra forma seria o aluno realizar o seu cadastro na hora da prova, e seus dados seriam gravados na tabela "alunos". Como percebi, o codaluno dessa tabela é auto incremento, então logo após o aluno efetuar o registro, você seleciona o último cadastro dessa tabela que consequentemente será do aluno que está fazendo a prova, sendo assim pega a ID dessa consulta e joga num campo hidden no seu formulário da prova, ai é só pegar por POST na hora de cadastrar.

 

São apenas sugestões, espero que possa ajudar...Se tiver dúvidas, estamos ai.

 

Abraço! Fabiano http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Fabiano!

 

De fato, já havia pensado e feito isso. Estipulei um login, onde o aluno deverá inserir seu username e senha, estes cadastrados através do f_aluno(formulário aluno) e cadaluno.php. Tb já desenvolvi um programa "verifica_cookies.php". Sobre session, ainda n estou utilizando mas, n poderia utilizar as informações advindas dos cookies? Tb em relação a isso, n tenho conseguido estabelecer uma conexão. O programa todo funciona e coloco a include acima de todo o código, posto q ele deverá aparecer sempre antes de qq comando, como bem sabem.

Bom, n sei se posso ficar postando toda hora os scripts aqui, ou se é contra as regras... Seria bem mais fácil para visualização.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Barbyzita.

}

echo "Total de <font color=blue>$pontos </font>ponto(s)";

$sql="INSERT into resultado_prova (pontos) values ('$pontos')"; <= Isso q estava faltando! Simples assim!

mysql_query($sql,$conexao) or die (mysql_error());

}

 

?>

Bom...realmente essa parte aí acima que você acabou descobrindo sozinha era o que eu estava imaginando aki...

kd essa tabela e kd a parte do sistema que realiza a inserção do codigo do aluno, a resposta correta e o total de pontos?

mais parabéns à você, pelo seu esforço e insistência e não se preocupe por ter passado 2 longos dias batendo cabeça com isso...pois é assim mesmo no inicio ok, rsss.

 

Bom...agora quanto à parte de gravar o id do aluno na tabela lá...você pode fazer o seguinte, além das alternativas que o FabianoM postou aí, você pode tambem está fazendo um select dos alunos existente em sua base de dados, que na hora de fazer a prova ele seleciona o nome dele faz toda a prova e depois manda gravar no banco. Mas...fica a questão da segurança né, dessa forma, qualquer aluno entra e seleciona o nome que quiser e faz a prova, bom...pensando nisso, após mandar gravar no banco, você pode colocar para o aluno informar o login e senha ou algum codigo unico(similiar à alguns banco, tipo a Caixa Econômica por exemplo), daí resolve a questão de um aluno selecionar o nome de outro e efetuar a prova, pois de acordo com o nome dele(id) se ele informar o login ou senha ou codigo de acesso inválido, o sistema não efetuará a validação da prova, e além do mais...de certa forma acho que que dispensa de certo modo a utilização de sessões, além de ser bem mais simples é claro.

 

Bom...essa é mais uma ideia ok.http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Abraços e boa sorte em seus estudos!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Roberto.

 

Realmente, o fato de ter "quebrado a cabeça" valeu mto a pena. É bem satisfatório descobrir e resolver determinada lacuna em seu programa.

Sobre sessões, estava pensando se poderia utilizar os cookies mesmo, afinal, ao efetuar o login, os cookies seriam firmados. Bom, às vzs a teoria é bem mais simples do q a prática, no entanto, acredito q seja possível, só devo estar errando, mais uma vez, alguma coisinha. hehehehe

Vou dar uma estudada "básica" aqui e, se realmente n conseguir, sei q poderei contar com a ajuda de todos.

 

Muito obrigada, de verdade. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro...na medida que for surgindo duvidas...vai postando aí pra galera, isso enriquece o conhecimento de muitos que vem aki com duvidas iguais ou similares às postadas aki.

 

Precisando...estamos aí...e lembre-se. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

"O forum iMasters é seu amigo, use-o SEM moderação". http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Abraços. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui o seguinte... O login é feito através do username e senha. Aí são criados os cookies. Só q eu gostaria de fazer com q o aluno entrasse com seu username e, na hora do professor levantar todas as notas, aparecesse o NOME cadastrado do aluno.

 

------------> Sigam abaixo, para melhor entendimento:

 

login.php:

<?php
include ("conecta.php");

$username=$_POST["username"];
$senhaaluno=$_POST["senhaaluno"];


$sql="SELECT * from aluno where username='$username' and senhaaluno='$senhaaluno'";
$resultado=mysql_query($sql) or die (mysql_error());
$linhas=mysql_num_rows($resultado);

if($linhas==0)
{
echo "<script>alert('Usuário não encontrado!');location.href='login.html';
</script>";
}
elseif($senhaaluno!=mysql_result($resultado, 0,"senhaaluno")){ //confere senha
	echo "<script>alert('Senha Inválida!');location.href='login.html';
	</script>";
}else{ // usuário e senha corretos. Cria-se os cookies:

	setcookie("username_aluno",$username);
	setcookie("senha_aluno",$senhaaluno);
	// direciona para a página inicial dos usuários cadastrados:
	header ("Location:administracao.php");
}
mysql_close($conexao);
?>

-------------------> Depois... o programa valida_cookies.php:

<?php
if (isset($_COOKIE["username_aluno"]))
$username_aluno=$_COOKIE["username_aluno"];
if(isset($_COOKIE["senha_aluno"]))
$senha_aluno=$_COOKIE["senha_aluno"];

if(!(empty($username_aluno) OR empty($senha_aluno)))
{
include("conecta.php");
$sql="SELECT * from aluno where username='$username_aluno'";
$resultado=mysql_query($sql) or die (mysql_error());

if (mysql_num_rows($resultado)==1)
{
if($senha_aluno !=mysql_result($resultado,0,"senhaaluno"))
	{
		setcookie("nome_aluno");
		setcookie("senha_aluno");
		echo"<script>alert('Você não efetuou o LOGIN!');location.href='login.html';
		</script>";
		exit;
	}
}
else
{
	setcookie("nome_aluno");
	setcookie("senha_aluno");
	echo"<script>alert('Você não afetuou o LOGIN!');location.href='login.html';
	</script>";
	exit;
}
}
else
{
echo "<script>alert('Você não efetuou o LOGIN!');location.href='login.html';
</script>";
exit;
}
mysql_close ($conexao);
?>

-------------------> Q é enviado para o programa administracao.php:

<?php
$username=$_COOKIE["username_aluno"];
?>
<center><h1><b>Administração</center></b>
</h1>
<br>
<h3>Olá, <?php echo $username; ?>!</h3>
<A href="prova_dinamica.php">Prova</a><br>
<A href="f_fornecedor.html">Professor</A><br>
<b><h3>Consulta</h3></b>
<A href="f_loccli.html">Aluno</A><br>
<A href="f_locforn.html">Professor</A><br>
<b><h3>Relatorio</h3></b>
<A href="lista_cliente.php">Aluno</A><br>
<A href="lista_fornecedor.php">Professor</A><br>

 

E, finalmente, direciona à prova, com o script já referenciado no início do tópico. Estou tendo dificuldades em fazer com q o aluno digite seu username mas, no banco de dados, apareça seu nome completo, definido durante o cadastro.

 

-------------> Pq no banco de dados eu havia estipulado o seguinte:

 

codprova int(3) Não auto_increment

username varchar(256) latin1_swedish_ci Não

pontos int(3) Não

 

Eu n poderia fazer uma comparação, como: $sql"INSERT into resultado_prova where username=='$nomealuno'";? Pq eu tentei e n deu certo... Lógico q eu acabei modificando a variável no banco de dados: nomaealuno ao invés de username.

 

São pequenas questões que ainda me deixam um pouco confusa... Falta de "intimidade" com os códigos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ali onde você faz o select do aluno conforme username e senha e depois se estiver correto grava o mesmo em um cookie:

 

}else{ // usuário e senha corretos. Cria-se os cookies:
 
    setcookie("username_aluno",$username);
    setcookie("senha_aluno",$senhaaluno);
    // direciona para a página inicial dos usuários cadastrados:
    header ("Location:administracao.php");
}

você pode fazer pra gravar o nome do aluno no banco:

 

}else{ // usuário e senha corretos. Cria-se os cookies:
 
    //precorro o resultado da consulta
    $dados = mysql_fetch_array($resultado);
   //pega o campo do nome do aluno
    $nomealuno = $dados["nomealuno"];

    setcookie("username_aluno",$username);
    setcookie("senha_aluno",$senhaaluno);
    setcookie("nome_aluno",$nomealuno);
    // direciona para a página inicial dos usuários cadastrados:
    header ("Location:administracao.php");
}

Aí na hora de cadastrar na tabela, você salva o nome do aluno conforme esse cookie.

 

Outra forma, seria na hora de cadastrar, você efetuar novamente a consulta do aluno conforme seu username (que acredito eu não existam mais de um com o mesmo) então pega seu nome e joga na tabela desejada.

 

Eu, particularmente, ao invés de salvar o nome, salvaria a ID do aluno, e na hora de mostrar o nome, faria uma consulta na tabela de alunos conforme a ID salva ;)

 

Mas acredito q isso possa te ajudar

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

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.