Ir para conteúdo
Fórum Script Brasil
  • 0

Quiz em PHP + MySQL


paulobetto

Pergunta

Olá pessoal,

Tenho um código de uma página de quiz que funciona normalmente puxando TODOS os registro de uma tabela. Porém, gostaria que essa mesma página puxasse apenas uma parte dos registros (ex. de 100 registros existentes na tabela, a página puxa 40).

Já utilizei ORDER by RAND() LIMIT 40, porém quando a página mostra as respostas elas vêm embaralhadas (inclusive respostas de outras perguntas existentes na tabela). Acho que é por causa do segundo query.

Alguém pode dar uma luz? Obrigado!

Segue estrutura da tabale e código da página:


CREATE TABLE quiz (
id tinyint(4) NOT NULL auto_increment,
q text NOT NULL,
question text NOT NULL,
opt1 text NOT NULL,
opt2 text NOT NULL,
opt3 text NOT NULL,
answer text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
[/codebox]

[codebox]
<?php

include("contentdb.php");

$display = mysql_query("SELECT * FROM $table ORDER BY id",$db);

if (!$submit) {


echo "<form method=post action=$PHP_SELF>";
echo "<table border=0>";

while ($row = mysql_fetch_array($display)) {

$id = $row["id"];
$question = $row["question"];
$opt1 = $row["opt1"];
$opt2 = $row["opt2"];
$opt3 = $row["opt3"];
$answer = $row["answer"];

echo "<tr><td colspan=3><br><b>$question</b></td></tr>";
echo "<tr><td>$opt1 <input type=radio name=q$id value=\"$opt1\"></td><td>$opt2 <input type=radio name=q$id value=\"$opt2\"></td><td>$opt3 <input type=radio name=q$id value=\"$opt3\"></td></tr>";

}

echo "</table>";
echo "<input type='submit' value='See how you did' name='submit'>";
echo "</form>";

}

elseif ($submit)

{

$score = 0;
$total = mysql_num_rows($display);
while ($result = mysql_fetch_array($display))


{

$answer = $result["answer"];
$q = $result["q"];

if ($$q == $answer)
{
$score++;
}

}

echo "<p align=center><b>You scored $score out of $total</b></p>";
echo "<p>";

if ($score == $total) {
echo "Congratulations! You got every question right!";
}
elseif ($score/$total < 0.34) {
echo "Oh dear. Not the best score, but don't worry, it's only a quiz.";
}
elseif ($score/$total > 0.67) {
echo "Well done! You certainly know your stuff.";
}
else {
echo "Not bad - but there were a few that caught you out!";
}

echo "</p>";

echo "<p>Here are the answers:";

echo "<table border=0>";
$display = mysql_query("SELECT * FROM $table ORDER BY id",$db);
while ($row = mysql_fetch_array($display)) {

$question = $row["question"];
$answer = $row["answer"];
$q = $row["q"];

echo "<tr><td><br>$question</td></tr>";

if ($$q == $answer)
{
echo "<tr><td>»you answered ${$q}, which is correct</td></tr>";
}
elseif ($$q == "") {
echo "<tr><td>»you didn't select an answer. The answer is $answer</td></tr>";
}
else {
echo "<tr><td>»you answered ${$q}. The answer is $answer</td></tr>";
}

}
echo "</table></p>";



}

?>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, paulobetto !

Seu problema é bem básico e seria resolvido se você soubesse um pouco mais de SQL.

Para poder ajudá-lo responda as questões abaixo que estão relacionadas à sua pergunta

Porém, gostaria que essa mesma página puxasse apenas uma parte dos registros ...

Já utilizei ORDER by RAND() LIMIT 40, porém quando a página mostra as respostas elas vêm embaralhadas (inclusive respostas de outras perguntas existentes na tabela).

Como você gostaria que os registros viessem?

Filtrado por algum campo?

Ordenado por algum campo?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...