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

Foreach sistema de provas


Heltinhu

Pergunta

Boa galera estou criando um sistema se provas para uma escola de cursos

Onde tenho no meu banco de dados

Uma tabela....

Perguntas(salvo as perguntas, juntamente com o id de cada pergunta)

Alternativas(salvo as alternativas de cada pergunta e relaciono os devidos Ids da pergunta)

Ate aqui beleza, na pagina da prova.php consulto o banco de dados pra montar as perguntas juntamente com as devidas alternativas tudo dboas

Agora como monto um foreach pra salvar as respostas de cada aluno para cada pergunta.

Tipo, o aluno respondeu o seguinte

idPergunta 1
idResposta 3

idPergunta 2
idResposta 4

idPergunta 3
idResposta 1

idPergunta 4
idResposta 3

Mais ou menos assim, para cada pergunta um ID e para cada pergunta tera umas 4 alternativas

Quero pegar o idPergunta e o idResposta e jogar em uma tabela no banco de dados, juntamente com alguns outros dados do aluno, tipo IDALUNO, para depois identifica-lo

alguém pode me ajudar

Vlw

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Teste de múltipla escolha

Eu acho que consegui terminar o esqueleto básico do programa. Cadastrei dois alunos: João e Maria do curso Básico. Cadastrei duas questões e inclui numa prova. João fez a prova, mas a Maria não. A imagem está no final da mensagem.

 

MySQL:

CREATE DEFINER=`root`@`localhost` PROCEDURE `procedimento`()
begin
drop tables if exists tbprovas, tbalunos, tbrespostas, tbquestoes;
CREATE TABLE tbprovas (
  `id` int NOT NULL AUTO_INCREMENT,
  `data` date DEFAULT NULL,
  `materia` varchar(45) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `questoes` json,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `tbalunos` (
  `id` int NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) COLLATE utf8mb4_general_ci NOT NULL,
  `curso` varchar(45) COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `tbrespostas` (
  `id` int NOT NULL AUTO_INCREMENT,
  `idalunos` int DEFAULT NULL,
  `idprovas` int DEFAULT NULL,
  `respostas` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `tbquestoes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `questao` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL,
  `alternativas` json DEFAULT NULL,
  `gabarito` varchar(1) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
end

astudy.php

<body style="width:50%;margin:0 auto"><div style="height:2%"></div>
<Menu>
    <a href="?opcao=1">Cadastrar Alunos</a> |
    <a href="?opcao=2">Questões</a> |
    <a href="?opcao=3">Provas</a> |
    <a href="?opcao=4">Resposta do Aluno</a> |
    <a href="?opcao=5">Apurar resultado</a>
</Menu>
<?php
$mysqli=new mysqli("localhost","root","","astudy");
if(isset($_GET['opcao'])){
    if($_GET['opcao']==1){
    echo "Cadastrar alunos<p>";
    echo "<form>";
    echo "Nome do aluno <input name=nomealuno required><p>";
    echo "Curso <input name=curso required><p>";
    echo "<input type=submit>";
    echo "</form>";}
    if($_GET['opcao']==2){
        echo "Criar uma nova questão<p>";
        echo "<form>";
        echo "<table>";
        echo "<tr><td>Questão:<td><input name=questao size=60>";
        echo "<tr><td>Alternativa A:<td><input name=alternativa[]>";
        echo "<tr><td>Alternativa B:<td><input name=alternativa[]>";
        echo "<tr><td>Alternativa C:<td><input name=alternativa[]>";
        echo "<tr><td>Alternativa D:<td><input name=alternativa[]>";
        echo "<tr><td>Alternativa E:<td><input name=alternativa[]>";
        echo "<tr><td>Resposta<td><input name=gabarito required size=1 maxlength=1>";
        echo "</table>";
        echo "<input type=submit>";
        echo "</form>";}
    if($_GET['opcao']==3){
    echo "<form>";
    echo "Data da Prova <input type=date name=dataprova required><p>";
    echo "Materia <input name=materia required><p>";
    echo "Escolha as questões que farão parte da prova<p>";
    $query=$mysqli->query("select * from tbquestoes");
    while($row=$query->fetch_assoc()){
        echo "<input type=checkbox name=questoes[] value=".$row['id'].">".$row['questao']."</input><br>";}
    echo "<input type=submit>";
    echo "</form>";}
    if($_GET['opcao']==4){
    echo "Inclusão das respostas do aluno<p>";
    echo "<form>";
    echo "<select name=aluno required>";
    echo "<option value=''>Selecione o aluno</option>";
    $query=$mysqli->query("select * from tbalunos order by nome");
    while($row=$query->fetch_assoc()){
        $json=json_encode([$row['id'],$row['nome'],$row['curso']]);
        echo "<option value='$json'>".$row['nome']." - ".$row['curso']."</option>";}
    echo "</select>";
    echo "<p>";
    echo "<select name=provaid required>";
    echo "<option value=''>Selecione a prova</option>";
    $query=$mysqli->query("select * from tbprovas order by data");
    while($row=$query->fetch_assoc()){
        $data=date('d/m/Y',strtotime($row['data']));
        $json=json_encode([$row['id'],$row['data'],$row['materia']]);
        echo "<option value='$json'>$data - ".$row['materia']."</option>";}
    echo "</select>";
    echo "<p>";
    echo "<input type=submit>";
    echo "</form>";}
    if($_GET['opcao']==5){
    echo "Resultado das correções das provas:<p>";
    $query=$mysqli->query("select * from tbalunos order by curso, nome");
    while($rows=$query->fetch_assoc()){
        echo $rows['nome']." do curso ".$rows['curso']." ";
        $idaluno=$rows['id'];
        $query2=$mysqli->query("select count(idalunos) as provas from tbrespostas where idalunos=$idaluno");
        $provas=$query2->fetch_assoc()['provas'];
        if($provas==0){echo "não fez nenhuma prova.<br>";}
        if($provas==1){echo "fez uma prova.<br>";}
        if($provas>1){echo "fez $provas provas.<br>";}
        if($provas>0){
            for($idprova=1;$idprova<=$provas;$idprova++){
            $query3=$mysqli->query("select * from tbquestoes,tbrespostas,tbprovas
                where idalunos=$idaluno and idprovas=$idprova");
            while($rows3=$query3->fetch_array(MYSQLI_ASSOC)){
                $gabarito[]=$rows3['gabarito'];$prova=$rows3['materia'];$data=$rows3['data'];$resposta=$rows3['respostas'];}
            $jresposta=json_decode($resposta);
            echo "=> prova de $prova de ".date('d/m/Y',strtotime($data)).": acertou ";
            $acertos=0;$questoes=0;
            foreach($gabarito as $gabarito){
                if($gabarito[0]==$resposta[0]){$acertos++;}
                $questoes++;}
            echo "$acertos em $questoes questões.";}
        echo "<p>";
        }}}
}
if(isset($_GET['nomealuno'])){
    $nomealuno=$_GET['nomealuno'];
    $curso=$_GET['curso'];
    $query=$mysqli->query("insert into tbalunos (nome,curso) values ('$nomealuno','$curso')");
    if(mysqli_insert_id($mysqli)){
        echo "Aluno cadastrado com sucesso.";} else {echo "Problema: aluno não cadastrado.";}
}
if(isset($_GET['dataprova'])){
    $dataprova=$_GET['dataprova'];
    $materia=$_GET['materia'];
    $questoes=json_encode($_GET['questoes']);
    $query=$mysqli->query("insert into tbprovas (data,materia,questoes) 
        values ('$dataprova','$materia','$questoes')");
    if(mysqli_insert_id($mysqli)){
        echo "Prova cadastrada com sucesso.";} else {echo "Problema: prova não cadastrada.";}
}
if(isset($_GET['questao'])){
    $questao=$_GET['questao'];
    $alternativas=json_encode($_GET['alternativa']);
    $gabarito=strtoupper($_GET['gabarito']);
    $query=$mysqli->query("insert into tbquestoes (questao,alternativas,gabarito)
        value ('$questao','$alternativas','$gabarito')");
    if(mysqli_insert_id($mysqli)){
        echo "Questão cadastrada com sucesso.";} else {echo "Problema: questão não cadastrada.";}
}
if(isset($_GET['aluno'])){
    $idAluno=json_decode($_GET['aluno']);
    $idProva=json_decode($_GET['provaid']);
    $id_aluno=$idAluno[0];$id_prova=$idProva[0];
    $query=$mysqli->query("select * from tbrespostas where idalunos=$id_aluno and idprovas=$id_prova");
    if($query->num_rows){echo "A resposta desse aluno já foi cadastrado.";exit;}
    echo "Inclusão das respostas do aluno <b>$idAluno[1]</b>";
    echo " do curso <b>$idAluno[2]</b><p>";
    echo "na prova de <b>$idProva[2]</b> de <b>".date('d/m/Y',strtotime($idProva[1]))."</b><p>";
    $query=$mysqli->query("select * from tbprovas where id=$idProva[0]");
    $questoes=json_decode($query->fetch_assoc()['questoes']);
    echo "<form>";
    $i=0;
    foreach($questoes as $questao){
        $query=$mysqli->query("select * from tbquestoes where id=$questao");
        $id="inp".$i;$java="$id.value=($id.value).toUpperCase()";
        echo "<input id=$id name=respostas[] maxlength=1 size=1 required onchange='$java'> ";$i++;
        echo $row=$query->fetch_assoc()['questao']."<p>";}
    echo "<input type=submit>";
    $Aluno=$idAluno[0];
    $Prova=$idProva[0];
    echo "<input type=hidden name=idAluno value='$Aluno'>";
    echo "<input type=hidden name=idProva value='$Prova'>";
    echo "</form>"; 
}
if(isset($_GET['respostas'])){
    $respostas=json_encode($_GET['respostas']);
    $idAluno=$_GET['idAluno'];
    $idProva=$_GET['idProva'];
    $query=$mysqli->query("insert into tbrespostas (idalunos,idprovas,respostas)
        values ($idAluno,$idProva,'$respostas')");
    if(mysqli_insert_id($mysqli)){echo "Resposta cadastrada com sucesso.";} else
        {echo "Problema: a resposta não foi cadastrada.";}
}

 

Screenshot_1.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
22 horas atrás, Heltinhu disse:

Agora como monto um foreach pra salvar as respostas de cada aluno para cada pergunta.

Se estiver usando mysql, mariadb ou postgresql, use a coluna json, e salve um json com essas ids

Link para o comentário
Compartilhar em outros sites

  • 0
Em 31/01/2023 em 07:23, Heltinhu disse:

Alguma ideia, nso sei como fazer

Eu acho que termei o meu código. A minha sugestão é criar quatro tabelas no MySQL, tbalunos, tbquestoes, tbprovas, tbrespostas. A tbprovas vai ser composto de várias provas, cada uma terá suas questões, bem como a resposta. As questões serão armazenadas num campo tipo json. A tbresposta vai pegar cada aluno e para cada prova que ele fizer, o PHP vai guardar as respostas num campo json. Finalmente, o PHP compara a resposta com o gabarito e avalia o aluno. Falar é fácil, mas levei três dias para montar, e elá está disponível na primeira mensagem que publiquei nesse tema.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...