Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom pessoal tenho uma prova e gostaria de estar passando o resultado da prova via POST e exibir quantas questões o usuário acertou, mas a princípio é somente passar via POST.
Tenho os seguintes códigos:
ProvaData.class.php
<?php
//header('Content-Type: text/plain');
class ProvaData extends CodonModule {
public $codprova;
public $titulo;
public $perguntas = array();
static public function getByCodigo($codprova){
$pdo = new PDO('mysql:host=localhost;dbname=xxxxxx','xxxxxxx','xxxxxx');
$prova = null;
$sql = 'SELECT pr.codprova,
pr.titulo,
pe.codpergunta,
pe.texto as pergunta,
pe.ordem as ordem_pergunta,
op.codopcao,
op.texto as opcao,
op.ordem as ordem_opcao,
op.correta
FROM prova pr
LEFT JOIN pergunta pe ON pe.codprova = pr.codprova
LEFT JOIN opcao op ON op.codpergunta = pe.codpergunta
WHERE pr.codprova = :codprova
ORDER BY pe.ordem, op.ordem';
$rs = $pdo->prepare($sql);
$rs->bindValue( ':codprova', $codprova );
$rs->execute();
while($row = $rs->fetch(PDO::FETCH_ASSOC)){
if(empty($prova)){
$prova = new Prova();
$prova->codprova = $row['codprova'];
$prova->titulo = $row['titulo'];
}
if(!empty($row['codpergunta'])){
if(!isset($prova->perguntas[$row['codpergunta']])){
$pergunta = new Pergunta();
$pergunta->codpergunta = $row['codpergunta'];
$pergunta->codprova = $row['codprova'];
$pergunta->texto = $row['pergunta'];
$pergunta->ordem = $row['ordem_pergunta'];
$prova->perguntas[$row['codpergunta']] = $pergunta;
} else {
$pergunta = $prova->perguntas[$row['codpergunta']];
}
}
if(!empty($row['codopcao'])){
if(!isset($pergunta->opcoes[$row['codopcao']])){
$opcao = new Opcao();
$opcao->codopcao = $row['codopcao'];
$opcao->codpergunta = $row['codpergunta'];
$opcao->texto = $row['opcao'];
$opcao->ordem = $row['ordem_opcao'];
$opcao->correta = !empty($row['correta']);
$pergunta->opcoes[$row['codopcao']] = $opcao;
}
}
}
if(!empty($prova)){
$prova->perguntas = array_values($prova->perguntas);
foreach($prova->perguntas as $pergunta){
$pergunta->opcoes = array_values($pergunta->opcoes);
}
}
return $prova;
}
}<?php
// classe que representa prova
class Prova extends CodonModule {
public $codprova;
public $titulo;
public $perguntas = array();
public function index()
{
switch($this->post->action)
{
case 'pr':
$this->pr();
case 'EnviaProva':
$this->Send();
default:
$this->i();
}
}
public function i()
{
if(!Auth::LoggedIn()) {
$this->set('message', 'You must be logged in to access this feature!');
$this->render('core_error.tpl');
return;
}
/*$this->set('recebeProva', ProvaData::PegarProva());*/
//$this->set('prova', ProvaData::getByCodigo($codprova));
$this->render('Prova/index.tpl');
$respotasProva = $this->post->codopcao;
if(isset($this->post->action))
{
if($this->post->action == 'codopcao')
{
$this->mostra_resultado();
}
}
}
protected function mostra_resultado()
{
if(!Auth::LoggedIn())
{
$this->set('message', 'Você precisa estar logado para acessar esta função!');
$this->render('core_error.tpl');
return;
}
$userinfo = Auth::$userinfo;
foreach($prova->perguntas as $pergunta){
$correta = $opcao->codpergunta;
if($respotasProva == $correta)
{
$params = array(
'code' => Auth::$userinfo->code,
'respoas_prova_recebidas' => $this->post->codopcao,
'email' => $this->post->email,
'retired' => false
);
echo '<script type="text/javascrip">alert("TESTADO COM SUCESSO!")</script>';
}
}
}
public function pr()
{
if(!Auth::LoggedIn()) {
$this->set('message', 'You must be logged in to access this feature!');
$this->render('core_error.tpl');
return;
}
/*$this->set('recebeProva', ProvaData::PegarProva());*/
//$this->set('prova', ProvaData::getByCodigo($codprova));
session_name(md5('sal'.$_SERVER['REMOTE_ADDR'].'sal'.$_SERVER['HTTP_USER_AGENT'].'session_iniciada_a_prova'));
$this->render('Prova/questoes.tpl');
$calcProva = DB::escape($this->get->calcProva);
$this->set('resultado', $_GET['pergunta[%d]']);
}
public function Send()
{
if(!Auth::LoggedIn()) {
$this->set('message', 'Você Precisa estar logado para acessar essa função!');
$this->render('core_error.tpl');
return;
}
// $this->post->'%d';
// $userProva = DB::escape($this->post->%d);
$resposta = $this->post->codopcao;
}
}
// Classe que representa pergunta
class Pergunta extends CodonModule {
public $codpergunta;
public $codprova;
public $texto;
public $ordem;
public $opcoes = array();
}
// Classe que representa opcao
class Opcao extends CodonModule {
public $codprova;
public $titulo;
public $perguntas = array();
public $codopcao;
public $codpergunta;
public $texto;
public $ordem;
public $correta;
}
index.php
<form action="#" name="prova" id="prova" method="post">
<?php
//// aqui você pode pegar por GET/POST/SESSION.
//// O que melhor servir no teu caso
$codprova = 1;
$prova = ProvaData::getByCodigo($codprova);
if(!empty($prova)){
?>
<h4 class="sub-header">Exibindo as perguntas da prova: <?php echo $prova->titulo?></h4>
<div class="control-group">
<?php foreach($prova->perguntas as $pergunta){
?>
<div class="block block-themed">
<div class="block-title">
<h4><?php echo $i?><i class="icon-circle text-info"></i><?php echo $pergunta->texto?></h4>
</div>
<div class="block-content">
<?php
foreach($pergunta->opcoes as $opcao){
/*printf('<label><input type="radio" name="pergunta[%d]" value="%d" /> %s</label>',
$opcao->codpergunta,
$opcao->codopcao,
$opcao->texto
);*/
?>
<input type="radio" class="input-themed" name="<?php echo $opcao->codpergunta;?>" value="<?php echo $opcao->codopcao;?>" /> <?php echo $opcao->texto;?><br/><br/>
<?php
}
?>
</div>
</div>
<?php
}
foreach($pergunta->opcoes as $opcao){
$recebeRespostas = $_POST[$opcao->codopcao];
$respostaCerta = $opcao->correta;
if($recebeRespostas == $opcao->correta){
echo '<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
alert ("Aluno Aprovado")
</SCRIPT>';
}else{
echo '<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
alert ("Aluno Reprovado")
</SCRIPT>';
}
}
}
?>
<input type="submit" class="btn btn-success" value="ENVIAR">
</form>
Então, como podem ver quando eu passo pelo POST os valores ele deveria exibir um alerta em javascript se o usuário foi aprovado ou não, só que ocorre é que ele exibe um alerta para cada questão! Mas eu gostaria que somente mostrasse se o usuário foi aprovado ou não, se ele selecionar 75% da questões corretas ele aprovado, senão, ele é reprovado! Mas eu não estou conseguindo fazer alguém poderia me dar uma LUZ??
deixa essa codigo fora do foreach... guarde o total de questões e total de respostas corretas depois faça o calculo da porcentagem.
Eu fiz o que você falou porém, fora do foreach, ele pega os valores apenas da última questão não pega das outras questões. Alguem poderia me ajudar com isso??
deixa essa codigo fora do foreach... guarde o total de questões e total de respostas corretas depois faça o calculo da porcentagem.