Base para prova online

Fez aquele sistema legal e quer disponibilizar para outros usuários Essa é a seção correta para isso.

Moderador: web

responder a dúvida

Base para prova online

Mensagem por web Offline » Seg Mai 18, 2009 11:31 am

Esse script é uma base para prova online, o responsável pode adicionar as perguntas em uma tela, e em outra tela é mostrado as perguntas cadastradas, com as opções para elas. Ao responder as perguntas, o usuário saberá quais acertou ou erro e verá o total de pontos feitos, 10 pontos para cada pergunta.

SQL já com uma pergunta cadastrada

Código: Selecionar todos
CREATE TABLE `perguntas` (
  `id` int(3) NOT NULL auto_increment,
  `pergunta` longtext NOT NULL,
  `resposta1` varchar(15) NOT NULL,
  `resposta2` varchar(15) NOT NULL,
  `resposta3` varchar(15) NOT NULL,
  `resposta4` varchar(15) NOT NULL,
  `correta` varchar(15) NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM  AUTO_INCREMENT=12 ;
INSERT INTO `perguntas` (`id`, `pergunta`, `resposta1`, `resposta2`, `resposta3`, `resposta4`, `correta`) VALUES (1, 'Qual melhor time do Brasil?', 'Corinthians ', 'Sao Paulo', 'Palmeiras', 'Flamengo', 'Corinthians ');

Arquivo de conexão ( conecta.php )

Código: Selecionar todos
<?php
$conexao = mysql_connect("localhost", "login", "senha") or die(mysql_error());
$db = mysql_select_db("bd");
?>

Página de adicionar ou excluir perguntas ( index.php )

Código: Selecionar todos
<?php
include("conecta.php");

if($_POST['cadastrar']) {
extract($_POST);

if($correta=="resp1") {
$Acorreta = $resposta1;
} elseif($correta=="resp2") {
$Acorreta = $resposta2;
} elseif($correta=="resp3") {
$Acorreta = $resposta3;
} elseif($correta=="resp4") {
$Acorreta = $resposta4;
}

$query = "insert into perguntas (pergunta, resposta1, resposta2, resposta3, resposta4, correta)
values('$pergunta', '$resposta1', '$resposta2', '$resposta3','$resposta4','$Acorreta')";
mysql_query($query) or die("Não foi possível cadastrar a pergunta");
echo "<script>alert('Pergunta cadastrada');location.href='index.php';</script>";
}

if($_GET['id']) {
extract($_GET);
$deleta="delete from perguntas where id='$id'";
mysql_query($deleta) or die("Não foi possível deletar a pergunta");
echo "<script>alert('Pergunta deletada');location.href='index.php';</script>";
}
?>

<form action="" method="POST">
Pergunta<br><textarea name="pergunta" cols="30" rows="5"></textarea>
<br>
resposta 1 <input type="text" name="resposta1" value=""> <input type="checkbox" name="correta" value="resp1"> correta
<br>
resposta 2 <input type="text" name="resposta2" value=""> <input type="checkbox" name="correta" value="resp2"> correta
<br>
resposta 3 <input type="text" name="resposta3" value=""> <input type="checkbox" name="correta" value="resp3"> correta
<br>
resposta 4 <input type="text" name="resposta4" value=""> <input type="checkbox" name="correta" value="resp4"> correta
<br>
<input type="submit" name="cadastrar">
</form>

<br>

<?php
$selec = "SELECT id, pergunta, resposta1, resposta2, resposta3, resposta4 FROM perguntas";
$exec = mysql_query($selec, $conexao) or die(mysql_error());
while($campos=mysql_fetch_array($exec)) {
extract($campos);
echo "$pergunta | <a href='?id=$id'><font color=red>Excluir</font></a><br>";
}
?>

Página que simula a prova ( simula.php )

Código: Selecionar todos
<?php
include("conecta.php");
?>

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

$selec = "SELECT id, pergunta, resposta1, resposta2, resposta3, resposta4, correta FROM perguntas WHERE id='$pergunta'";
$exec = mysql_query($selec, $conexao) or die(mysql_error());

while($campos=mysql_fetch_array($exec)) {
extract($campos);

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

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

<form action="" method="POST">
<?php
$selec = "SELECT id, pergunta, resposta1, resposta2, resposta3, resposta4 FROM perguntas";
$exec = mysql_query($selec, $conexao) or die(mysql_error());
while($campos=mysql_fetch_array($exec)) {
extract($campos);
echo "$pergunta<br>\n";
echo "<input type='radio' name='$id' value='$resposta1'>$resposta1<br>\n";
echo "<input type='radio' name='$id' value='$resposta2'>$resposta2<br>\n";
echo "<input type='radio' name='$id' value='$resposta3'>$resposta3<br>\n";
echo "<input type='radio' name='$id' value='$resposta4'>$resposta4<br><br>\n";
}
?>
<input type="submit" name="enviar">
</form>



detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por LhnM Offline » Dom Jul 19, 2009 4:31 pm

Em primeiro, parabens pelo codigo!!

Estou modificando ele aqui para funcionar pra q as perguntas sejam randomicas; ...
Código: Selecionar todos
resposta4 FROM perguntas order by rand() limit 3 ";
... , ate ai td bem porem, quando exibe o resultado ele mostra a resposta dos que eu selecionei e mostra tambem o reto das perguntas a responder...

Oq posso fazer para que mostre apenas a resultado das perguntas que eu respondi?

detalhes...


LhnM
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 5
Registrado em: Dom Jul 19, 2009 3:31 pm


Base para prova online

Mensagem por web Offline » Dom Jul 19, 2009 4:48 pm

Eu retestei o sistema aqui novamente, colocando adicionando seguinte na linha do segundo select, onde retorna as perguntas:

ORDER BY RAND() LIMIT 1

E o script retornou somente a resposta da pergunta que fiz. Se possível posta o seu script online.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por LhnM Offline » Dom Jul 19, 2009 4:52 pm

Script:
Código: Selecionar todos
<?php
include("conecta.php");
?>

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

$selec = "SELECT id, pergunta, resposta1, resposta2, resposta3, resposta4, correta FROM perguntas WHERE id='$pergunta'";
$exec = mysql_query($selec, $conexao) or die(mysql_error());

while($campos=mysql_fetch_array($exec)) {
extract($campos);

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

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

<form action="" method="POST">
<?php
$selec = "SELECT id, pergunta, resposta1, resposta2, resposta3, resposta4 FROM perguntas order by rand() limit 3 ";
$exec = mysql_query($selec, $conexao) or die(mysql_error());
while($campos=mysql_fetch_array($exec)) {
extract($campos);
echo "$pergunta<br>\n";
echo "<input type='radio' name='$id' value='$resposta1'>$resposta1<br>\n";
echo "<input type='radio' name='$id' value='$resposta2'>$resposta2<br>\n";
echo "<input type='radio' name='$id' value='$resposta3'>$resposta3<br>\n";
echo "<input type='radio' name='$id' value='$resposta4'>$resposta4<br><br>\n";
}
?>
<input type="submit" name="enviar">
</form>

Tinha q por em ambos select's?
Olha la no meu serv de test:
http://lhnm.homecko.com/perguntas/simula.php

detalhes...


LhnM
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 5
Registrado em: Dom Jul 19, 2009 3:31 pm


Base para prova online

Mensagem por web Offline » Dom Jul 19, 2009 4:56 pm

Eu testei aqui o seu, e ví o seguinte:

A página com 3 perguntas e repostas para selecionar, ao enviar, mostrou a resposta somente da pergunta 1, que foi a que selecionei. Qual seu objetivo?

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por LhnM Offline » Dom Jul 19, 2009 4:58 pm

Meu objetivo é fazer com que ele mostre apenas as perguntas q eu respondo.

detalhes...


LhnM
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 5
Registrado em: Dom Jul 19, 2009 3:31 pm


Base para prova online

Mensagem por web Offline » Dom Jul 19, 2009 5:09 pm

Mas é isso que está acontecendo, veja a seguir

Eu fiz um rand() para mostrar 2 perguntas

A primeira tela
http://img29.imageshack.us/i/post1.png/
Eu marquei "somente a primeira pergunta"

Agora a segunda tela
http://img263.imageshack.us/i/post2.png/

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por LhnM Offline » Seg Jul 20, 2009 4:06 pm

Sim, tu respondeu uma pergunta , so que nas respostas mostra as outras sem responder, e meu objetivo e fazer com q elas fiquem ocultas.

detalhes...


LhnM
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 5
Registrado em: Dom Jul 19, 2009 3:31 pm


Base para prova online

Mensagem por web Offline » Seg Jul 20, 2009 4:15 pm

Tem como você simular ai um print, porque as idéias não estão batendo. :plus

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por LhnM Offline » Seg Jul 20, 2009 5:16 pm

Ok, mas vamos esquecer td que foi dito :roll ...

O que preciso agora é por um limite de pontos para que a pessoa "passe" e mandar um resultado pro db indicando o resultado...

detalhes...


LhnM
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 5
Registrado em: Dom Jul 19, 2009 3:31 pm


Base para prova online

Mensagem por web Offline » Seg Jul 20, 2009 5:22 pm

Então se você deixar 5 perguntas para responder, as pessoas tem que responder todas, correto? Se sim, basta fazer uma validação de preferência em JavaScript, para não permitir que alguma opção venha vazia.

Já no script tem essa linha
echo "Total de <font color=blue>$pontos</font> ponto(s)";

Nessa linha $pontos vai mostrar quantos pontos a pessoa fez, de acordo com a quantidade, baseado no número de perguntas, você adiciona um insert para uma tabela sua.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Base para prova online

Mensagem por Barbyzita Offline » Seg Ago 10, 2009 1:30 pm

Como estabelecer a conexão com o banco de dados? Precisaria apenas da variável $pontos?? Já tentei criar uma tabela e n consegui passar a pontuação do aluno para a mesma... Estou sem luz no fim do túnel... :blush

detalhes...


Barbyzita
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 2
Registrado em: Seg Ago 03, 2009 4:48 pm


Base para prova online

Mensagem por Barbyzita Offline » Seg Ago 10, 2009 1:58 pm

Rpz... fiquei 2 dias para descobrir como fazer a conexão com o banco de dados e, no entanto, era só digitar na linha de baixo:
echo "Total de <font color=blue>$pontos </font>ponto(s)";
$sql="INSERT into resultado_prova (pontos) values ('$pontos')";
mysql_query($sql,$conexao) or die (mysql_error());
}

?>

??????????? PASMEM!

Agora queria estabelecer, além da variável $pontos, a variável $username, para identificar as respostas de cada aluno, individualmente. Como faço?

Obrigada.

detalhes...


Barbyzita
NOVO MEMBRO
NOVO MEMBRO
Mensagens: 2
Registrado em: Seg Ago 03, 2009 4:48 pm


Base para prova online

Mensagem por web Offline » Seg Ago 10, 2009 6:11 pm

O $username já está no BD ou vem do formulário?

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11889
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil


responder a dúvida

Voltar para Laboratório de scripts PHP / MySQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante