Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoas,
Estou tentando desenvolver um quiz dinâmico que recebe suas informações de um banco de dados.... porém eu não gostaria que fosse exibido todas as perguntas de uma vez, exemplo:
Digamos que tenho 5.000 perguntas no meu banco, informo na minha consulta que só quero 5 dessas 5.000 perguntas e em seguida gostaria de exibir 1 por vez (ai é que ta o problema):
A consulta faço dessa maneira:
<?php
$limite_perg = 5;
$sql = "SELECT * FROM perguntas order by id LIMIT $limite_perg"; $resultado = pg_query($sql) or die ("Problema na Consulta");
$linhas = pg_num_rows($resultado);
for ($i=0; $i<$linhas; $i++){
while ($linha = pg_fetch_array($resultado)) {
//recebo as informações do banco
$questao = $linha["questao"];
$respcerta = $linha["respcerta"];
$resperrada1 = $linha["resperrada1"];
$resperrada2 = $linha["resperrada2"];
$resperrada3 = $linha["resperrada3"];
$resperrada4 = $linha["resperrada4"];
$resperrada5 = $linha["resperrada5"];
//a ideia era inserir dentro de um array essas informações, para eu ter o controle da quantidade de perguntas que quero exibir (no meu caso de 1 em 1)
$arrayPergunta[$i] = $questao;
$arrayResposta0[$i] = $respcerta;
$arrayResposta1[$i] = $resperrada1;
$arrayResposta2[$i] = $resperrada2;
$arrayResposta3[$i] = $resperrada3;
$arrayResposta4[$i] = $resperrada4;
$arrayResposta5[$i] = $resperrada5; ?>
E no meu form estaria dessa maneira :
Ainda n esta bem do jeito que eu queria, porque a ideia era dinamiza a exibição das perguntas, caso o usuario acerte, iria ser feito uma nova consulta exibindo a pergunta 2 e assim por diante, atraves do "$arrayResposta4[1]"** por exemplo.
<form id="form_quiz" name= "form_quiz" method="post" action="" onsubmit="return RadioHab();">
<legend><h1>Responda as perguntas abaixo</h1></legend>
<fieldset id="pergunta1" style="display:block">
<label for="sexo" class="pergunta"><br /><?php echo"$arrayPergunta[0]"?><br> </label>
<input name="resposta" type="radio" value="1" />
<span class="textRadio" ><?php echo"$arrayResposta0[0]"?></span>
<br>
<input name="resposta" type="radio" value="0"/>
<span class="textRadio" ><?php echo"$arrayResposta1[0]"?></span>
<br>
<input name="resposta" type="radio" value="0"/>
<span class="textRadio" ><?php echo"$arrayResposta2[0]"?></span>
<br>
<input name="resposta" type="radio" value="0"/>
<span class="textRadio" ><?php echo"$arrayResposta3[0]"?></span>
<br>
<input name="resposta" type="radio" value="0"/>
<span class="textRadio" ><?php echo"$arrayResposta4[0]"?></span>
<br>
<input name="resposta" type="radio" value="0"/>
<span class="textRadio" ><?php echo"$arrayResposta5[0]"?></span>
<br/>
<input type="button" value="Inscrever" onclick="solucao();" />
</fieldset>
</form>
<?php
} }
?>
Também tem o codigo em javaScript, que utilizo para "validar" a resposta:
function solucao(){
var radio=null;
var radio = document.form_quiz.resposta;
for(var i=0;i < radio.length;i++){
if(radio[i].checked){
if(radio[i].value == 1){
alert("resposta_Correta");
}else{
alert("resposta_errada");
}
}
}
}
Bom, n sei o que estou fazendo de errado, porque mesmo eu inserindo os valores do banco em uma array:
<?php echo"$arrayPergunta[0]"?>
<?php echo"$arrayResposta0[0]"?>
<?php echo"$arrayResposta1[0]"?>
<?php echo"$arrayResposta2[0]"?>
<?php echo"$arrayResposta3[0]"?>
<?php echo"$arrayResposta4[0]"?>
<?php echo"$arrayResposta5[0]"?>
com a ideia de exibir 1 pergunta por vez, o danado ainda exibe as 5 perguntas ao mesmo tempo. T_T
Alguém pode me informar se estou fazendo alguma coisa de errado? Ou até sugerir uma solução melhor para o q quero fazer, para eu começar a meter a mão na massa?
Espero q eu tenha conseguido deixar claro... Agradecido desde já.. abraço
>
Acho que isso pode lhe resolver o problema.
Nessa linha faz o seguinte ele pega os primeiros 5 registros.
$sql = "SELECT * FROM perguntas order by id LIMIT 0,$limite_perg";
Já nessa linha pega somente o sexto registro.
$registro = 5;
$sql = "SELECT * FROM perguntas order by id LIMIT $registro,1";
Lebrando que o mysql começa a contar o primeiro registro como 0.
Para puxar as proximas questões é só você pegar e acrescentar + 1 a variavel $registro.
Pow, Ricardo desde já agradeço pela força...
Tentei fazer o que vc me indicou, porém n funfou mto... pra ser mais exato deu problema na consulta, como estou trabalhando em um servidor de uma instituição em que trabalho, os responsáveis pelo servidor bloqueou as mensagens de erros, dai n posso te dizer o motivo do problema na consulta.
Sim e o meu banco é postgresql, tentei até dar uma olhada nas consultas do postgres e notei q alguns codigos utilizavam limit 0,1; n sei pq esta dando pau no meu.
O segundo exemplo q vc citou, seria filé pra mim... pelo que entendi poderia carregar as 5 perguntas e exibir apenas 1, mas essa parte da consulta -> $limite_perg,1 n funfou.
Eu n entendo pq n estou conseguindo salvar cada linha da consulta em um campo do array como mostrado abaixo:
$arrayPergunta[$i] = $questao;
$arrayResposta0[$i] = $respcerta;
$arrayResposta1[$i] = $resperrada1;
$arrayResposta2[$i] = $resperrada2;
$arrayResposta3[$i] = $resperrada3;
$arrayResposta4[$i] = $resperrada4;
$arrayResposta5[$i] = $resperrada5;
É como s ele inserisse todas as linhas do banco dentro em:
$arrayPergunta[0];
$arrayResposta0[0];
$arrayResposta1[0];
$arrayResposta2[0];
$arrayResposta3[0];
$arrayResposta4[0];
$arrayResposta5[0];
Estou fazendo alguma coisa de errado?
>
Acho que isso pode lhe resolver o problema.
Nessa linha faz o seguinte ele pega os primeiros 5 registros.
$sql = "SELECT * FROM perguntas order by id LIMIT 0,$limite_perg";
Já nessa linha pega somente o sexto registro.
$registro = 5;
$sql = "SELECT * FROM perguntas order by id LIMIT $registro,1";
Lebrando que o mysql começa a contar o primeiro registro como 0.
Para puxar as proximas questões é só você pegar e acrescentar + 1 a variavel $registro.
Ah... Ricardo entendi o que tu quiz dizer...
Saca só, fiz da seguinte maneira:
$limite_perg = 2;
$registro = 1;
$sql_deposito = "SELECT * FROM perguntas order by id LIMIT $limite_perg ";
$resultado = pg_query($sql_deposito) or die ("Problema na Consulta");
$linhas = pg_num_rows($resultado);
for ($i=0; $i<$linhas; $i++){
while ($linha = pg_fetch_array($resultado)){
$questao = $linha["questao"];
$respcerta = $linha["respcerta"];
$resperrada1 = $linha["resperrada1"];
$resperrada2 = $linha["resperrada2"];
$resperrada3 = $linha["resperrada3"];
$resperrada4 = $linha["resperrada4"];
$resperrada5 = $linha["resperrada5"];
//Aqui tentei guardar todas as 5 perguntas (mas n consegui)
$arrayPergunta[$i] = $questao;
$arrayResposta0[$i] = $respcerta;
$arrayResposta1[$i] = $resperrada1;
$arrayResposta2[$i] = $resperrada2;
$arrayResposta3[$i] = $resperrada3;
$arrayResposta4[$i] = $resperrada4;
$arrayResposta5[$i] = $resperrada5;
$sql_deposito = "SELECT * FROM pergunta order by id LIMIT $registro "; $resultado = pg_query($sql_deposito) or die ("Problema na Consulta");
$linhas = pg_num_rows($resultado);
for ($a=0; $a<$linhas; $a++){
while ($linha = pg_fetch_array($resultado)){
//Aqui ta funcionando de primeira
$arrayPergunta_exib = $arrayPergunta[$i];
$arrayResposta[0] = $arrayResposta0[$i];
$arrayResposta[1] = $arrayResposta1[$i];
$arrayResposta[2] = $arrayResposta2[$i];
$arrayResposta[3] = $arrayResposta3[$i];
$arrayResposta[4] = $arrayResposta4[$i];
$arrayResposta[5] = $arrayResposta5[$i];
A unica bronca agora é que, quando coloco registro com 2 por exemplo (para testar), ele exibe a mesma pergunta 2x.
Tem ideia do q eu possa esta fazendo de errado?
Vlws
Ops mals tinhas postado uma solução para mysql.
Postegre é um pouco diferente tem um comando chamado OFFSET ele define de qual registro voce ira começar a consulta.
$sql_deposito = "SELECT * FROM perguntas order by id LIMIT $limite_perg OFFSET 0";//pegaria o primeiro registro
O LIMIT é usado para limitar a quantidade de dados que sera retornado na consulta.
ja o OFFSET server para indicar de onde ele começara a consulta lembrando que o primeiro valor retornonado é igual a 0;
acho que isso pode lhe ajudar da uma olhadinha no manual
http://www.postgresql.org/docs/8.0/static/queries-limit.html
>
Ops mals tinhas postado uma solução para mysql.
Postegre é um pouco diferente tem um comando chamado OFFSET ele define de qual registro voce ira começar a consulta.
$sql_deposito = "SELECT * FROM perguntas order by id LIMIT $limite_perg OFFSET 0";//pegaria o primeiro registro O LIMIT é usado para limitar a quantidade de dados que sera retornado na consulta.
ja o OFFSET server para indicar de onde ele começara a consulta lembrando que o primeiro valor retornonado é igual a 0;
acho que isso pode lhe ajudar da uma olhadinha no manual
http://www.postgresql.org/docs/8.0/static/queries-limit.html
Vlws Ricardo dei uma lida a respeito.. e estou ate agora tentando resolver.. mas ainda assim n tenho tido muito sucesso.
A bronca é a seguinte, mesmo eu usando o OFFSET que a principio me informa por qual linha do banco será inicializado a exibição das informações, n resolve meu problema.... pq o q eu qro é receber as 5 perguntas e exibir apenas 1.
Quando insiro o OFFSET conforme mostrado abaixo:
SELECT * FROM pergunta order by id LIMIT 5 OFFSET 0 ;Eu estou dizendo que quero exibir as 5 perguntas (no meu caso) e que comece a partir da primeira quando coloco OFFSET 0, exemplor:
linha1
linha2
linha3
linha4
linha5
Quando insiro 5 OFFSET 2, estou informando pro banco que quero q comece a partir da 3 pergunta... exemplo:
linha 3
linha 4
linha 5
N é bem o que quero...
O OFFSET so funfa do como "gostaria", quando insiro 1 OFFSET 0, ai sim ele exibe de 1 em 1, mas perco a ideia inicial que seria carregar 5 perguntas e exibir apenas 1.
Mas acredito que o caminho seja ess.. \o s puder me dar + alguma dica, serei grato...
Vlws mesmo pela força.. tô quase la... assim q descobri algo posto aqui. abraço
Acho que isso pode lhe resolver o problema.
Nessa linha faz o seguinte ele pega os primeiros 5 registros.
$sql = "SELECT * FROM perguntas order by id LIMIT 0,$limite_perg";
Já nessa linha pega somente o sexto registro.
Lebrando que o mysql começa a contar o primeiro registro como 0.Para puxar as proximas questões é só você pegar e acrescentar + 1 a variavel $registro.