Lúcio Flávio da Silva Sales Postado Setembro 16 Denunciar Share Postado Setembro 16 (editado) Estou tendo dificuldade de passar essas querys por objeto: A linha return $listarProvas; do arquivo Prova.php não repassa as variáveis $prova1 e $prova2 chamadas na linha $listar_questoes = $listar_questoes->ListarProvas(); do arquivo prova.php. Arquivo onde se encontra a função: Prova.php <?php Class Provas { public function ListarProvas() { $objConexao = new Conexao(); $conexao = $objConexao->getConexao(); $sql = "select * from questoes where Id = 1"; $resposta = $conexao->query($sql); $prova1 = $resposta->fetch_assoc(); $sql = "select * from questoes where Id = 2"; $resposta = $conexao->query($sql); $prova2 = $resposta->fetch_assoc(); $listarProvas = new Provas($prova1,$prova2); return $listarProvas; } } ?> Arquivo onde os resultados devem ser apresentados prova.php <?php $listar_questoes = new Provas(); $listar_questoes = $listar_questoes->ListarProvas(); Questão 1: echo (isset ($prova1["Questao"])?$prova1["Questao"]:""); (A) echo(isset ($prova1["Alt_A"])?$prova1["Alt_A"]:""); (B) php echo(isset ($prova1["Alt_B"])?$prova1["Alt_B"]:""); (C) php echo(isset ($prova1["Alt_C"])?$prova1["Alt_C"]:""); (D) php echo(isset ($prova1["Alt_D"])?$prova1["Alt_D"]:""); (E) php echo(isset ($prova1["Alt_E"])?$prova1["Alt_E"]:""); Questão 2: echo (isset ($prova2["Questao"])?$prova2["Questao"]:""); (A) echo(isset ($prova2["Alt_A"])?$prova2["Alt_A"]:""); (B) echo(isset ($prova2["Alt_B"])?$prova2["Alt_B"]:""); (C) echo(isset ($prova2["Alt_C"])?$prova2["Alt_C"]:""); (D) echo(isset ($prova2["Alt_D"])?$prova2["Alt_D"]:""); (E) echo(isset ($prova2["Alt_E"])?$prova2["Alt_E"]:""); ?> Editado Setembro 21 por Lúcio Flávio da Silva Sales Citar Link para o comentário Compartilhar em outros sites More sharing options...
1 Frank K Hosaka Postado Setembro 16 Denunciar Share Postado Setembro 16 <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') class Provas { function listar($id) { $conexao=new mysqli("localhost","root","","teste"); return $conexao->query("select * from provas where id=$id")->fetch_assoc(); } } for($q=1;$q<=2;$q++) { $prova=(new Provas)->listar($q); $vetores=explode(',',$prova['questao']); foreach($vetores as $chave => $vetor) { if($chave==0) { echo "<br>"; echo $q . ". " . $vetor . "<br>"; } else { echo chr($chave+64) . ". " . $vetor . "<br>"; } } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lúcio Flávio da Silva Sales Postado Setembro 18 Autor Denunciar Share Postado Setembro 18 Em 16/09/2024 em 00:52, Frank K Hosaka disse: <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') class Provas { function listar($id) { $conexao=new mysqli("localhost","root","","teste"); return $conexao->query("select * from provas where id=$id")->fetch_assoc(); } } for($q=1;$q<=2;$q++) { $prova=(new Provas)->listar($q); $vetores=explode(',',$prova['questao']); foreach($vetores as $chave => $vetor) { if($chave==0) { echo "<br>"; echo $q . ". " . $vetor . "<br>"; } else { echo chr($chave+64) . ". " . $vetor . "<br>"; } } } ObrIgado, Frank, meu professor! Vou ver como fizeste a passagem da variavel. Pode ser que eu tenha omitido alguma informaçao. Eu preciso fazer as consultas separadas, porque cada uma corresponde a uma questao da prova e quero mudar a posiçao da questao de acordo com o tipo de prova. então, fazer por foreach me parece não permitir fazer essas alteraçoes de posiçao da questao e das alternativas. O problema e que como são variaveis contendo listas, não estou sabendo retornar para a chamada da funçao. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Setembro 18 Denunciar Share Postado Setembro 18 (editado) <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') // (3, 'Quanto é 1+1?,1,2,3,4,5') // (4, 'Quanto é o logaritimo de 10 na base 10?,1,2,3,4,5') class Provas { private $Conexao; function __construct() { $this->Conexao=new mysqli("localhost","root","","teste"); } function selecionar($id) { return $this->Conexao->query("select * from provas where id=$id") ->fetch_assoc(); } function imprimir($vetor) { $q=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); foreach($vetores as $chave => $vetor) { if($chave==0) { echo "<br>"; $q++; echo $q . ". " . $vetor . "<br>"; } else { echo chr($chave+64) . ". " . $vetor . "<br>"; } } } } } (new Provas)->imprimir([4,3]); Editado Setembro 18 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lúcio Flávio da Silva Sales Postado Setembro 19 Autor Denunciar Share Postado Setembro 19 (editado) 14 horas atrás, Frank K Hosaka disse: <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') // (3, 'Quanto é 1+1?,1,2,3,4,5') // (4, 'Quanto é o logaritimo de 10 na base 10?,1,2,3,4,5') class Provas { private $Conexao; function __construct() { $this->Conexao=new mysqli("localhost","root","","teste"); } function selecionar($id) { return $this->Conexao->query("select * from provas where id=$id") ->fetch_assoc(); } function imprimir($vetor) { $q=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); foreach($vetores as $chave => $vetor) { if($chave==0) { echo "<br>"; $q++; echo $q . ". " . $vetor . "<br>"; } else { echo chr($chave+64) . ". " . $vetor . "<br>"; } } } } } (new Provas)->imprimir([4,3]); Entendi a ideia dessa função. Nela eu posso definir em que ordem as questões virão. Mas ela ainda gera um relatório, e para fazer as alternâncias na ordem das questões e das alternativas eu teria que alterá-la para cada tipo de prova. O que eu tento fazer é criar uma variável com o select para cada questão. Nela vai a pergunta e as alternativas. Quando eu conseguir passar essas variáveis, então consigo montar a prova colocando a pergunta e as alternativas correspondentes em qualquer ordem na prova, e também alterando a ordem das alternativas em cada questão. A minha dificuldade é passar essas consultas numa chamada única do arquivo onde já tenho as questões e alternativas posicionadas em locais diferentes em cada prova. Por enquanto estou tendo que fazer as consultas todas em cada prova: È um exemplo bem abreviado. Estou omitindo boa parte do código para facilitar a escrita. Prova 1: $sql1 = "select * questoes where id = 1" $sql2 = "select * questoes where id = 2" Questão 1 - $sql1['questão'] (A) $sql1['alternativa A'] (B) $sql1['alternativa B'] (C) $sql1['alternativa C'] (D) $sql1['alternativa D'] (E) $sql1['alternativa E'] Questão 2 - $sql2['questão'] (A) $sql2['alternativa A'] (B) $sql2['alternativa B'] (C) $sql2['alternativa C'] (D) $sql2['alternativa D'] (E) $sql2['alternativa E'] Prova 2: $sql1 = "select * questoes where id = 1" $sql2 = "select * questoes where id = 2" Questão 1 - $sql2['questão'] (A) $sql2['alternativa E'] (B) $sql2['alternativa A'] (C) $sql2['alternativa C'] (D) $sql2['alternativa B'] (E) $sql2['alternativa D'] Questão 2 - $sql1['questão'] (A) $sql1['alternativa C'] (B) $sql1['alternativa A'] (C) $sql1['alternativa E'] (D) $sql1['alternativa D'] (E) $sql1['alternativa B'] É assim que estou conseguindo fazer. Se eu conseguir centralizar as consultas ao banco de dados num arquivo só, a escrita da página da prova vai ficar enxuta. Fico muito grato pelo esforço! Editado Setembro 19 por Lúcio Flávio da Silva Sales Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Setembro 19 Denunciar Share Postado Setembro 19 (editado) Hahahahaha... agora, eu entendi. Você não confia nos alunos: <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') // (3, 'Quanto é 1+1?,1,2,3,4,5') // (4, 'Quanto é o logaritimo de 10 na base 10?,1,2,3,4,5') class Provas { private $Conexao; function __construct() { $this->Conexao=new mysqli("localhost","root","","teste"); } function imprimir($vetor) { echo "Prova 1<br>"; $numeroQuestao=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); $questao=array_shift($vetores); $numeroQuestao++; $this->imprimirQuestao($questao,$numeroQuestao); $indicador=0; foreach($vetores as $alternativa) { $indicador++; echo chr($indicador+64) . ". " . $alternativa . "<br>"; } } echo "<br>--------- picote aqui----<br>"; echo "<br>Prova 2<br>"; shuffle($vetor); $numeroQuestao=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); $questao=array_shift($vetores); $numeroQuestao++; $this->imprimirQuestao($questao,$numeroQuestao); shuffle($vetores); $indicador=64; foreach($vetores as $alternativa) { $indicador++; echo chr($indicador) . ". " . $alternativa . "<br>"; } } } function imprimirQuestao($questao,$numeroQuestao) { echo "<br>"; echo $numeroQuestao . ". " . $questao . "<br>"; } function selecionar($id) { return $this->Conexao->query("select * from provas where id=$id") ->fetch_assoc(); } } (new Provas)->imprimir([4,3]); Editado Setembro 19 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lúcio Flávio da Silva Sales Postado Setembro 21 Autor Denunciar Share Postado Setembro 21 Obrigado, Frank! Vou me aplicar na compreensão dessa lógica. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Setembro 21 Denunciar Share Postado Setembro 21 (editado) Lamentavelmente, isso daí não é nada óbvio. Estou tentanto estudar a linguagem orientada a objetos desde 2020, mas eu só consegui engatinhar em 2024 com a ajuda do autoload para o PHP 8.2 que o iOwys publicou no fórum Script. O autoload explica para o PHP aonde estão as classes. Mas não basta o PHP saber onde estão as classes, ele precisa saber como chegar até a classe, assim ele precisa do roteador. Na internet tem um monte de roteadores prontos para você baixar pelo comando composer, mas ao invés disso eu ofereço um roteador meia-boca para você ver a cara dele, e estudar como ele funciona. Classe é um conceito muito antigo, mas para fazer funcionar, só nesse ano é que eu consegui alguma coisa. arquivo config.php <?php ini_set('display_errors', 1); date_default_timezone_set('America/Sao_Paulo'); spl_autoload_register(fn ($class) => require str_replace('\\', DIRECTORY_SEPARATOR, strtolower($class)) . '.php'); function view($arquivo, $array = null) { if (!is_null($array)){ foreach ($array as $var => $value) { ${$var} = $value; } } ob_start(); include $arquivo . ".php"; ob_flush(); } arquivo index.php <?php require 'config.php'; $rota='Provas_inicio'; if($_GET) { if(strpos(key($_GET),"_")==0) { exit; } $rota=isset($_GET) ? key($_GET) : $rota; } $segmentos=explode('_',$rota); $nomeControle=$segmentos[0] ?? 'Provas'; $metodo=$segmentos[1] ?? 'inicio'; $parametro=$segmentos[2] ?? null; $controle=new $nomeControle(); $controle->$metodo($parametro); arquivo provas.php <?php // mysql.teste.provas(id,questao) // (1,'Quem descobriu o Brasil?,Pedro,João,Maria,Nenhuma das anteriores'), // (2,'O Brasil tem futuro?,Sim,Não,Talvez') // (3, 'Quanto é 1+1?,1,2,3,4,5') // (4, 'Quanto é o logaritimo de 10 na base 10?,1,2,3,4,5') class Provas { private $Conexao; function __construct() { $this->Conexao=new mysqli("localhost","root","","teste"); } function imprimir() { $vetor=explode(",",$_POST['questoes']); echo "Prova 1<br>"; $numeroQuestao=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); $questao=array_shift($vetores); $numeroQuestao++; $this->imprimirQuestao($questao,$numeroQuestao); $indicador=0; foreach($vetores as $alternativa) { $indicador++; echo chr($indicador+64) . ". " . $alternativa . "<br>"; } } echo "<br>--------- picote aqui----<br>"; echo "<br>Prova 2<br>"; shuffle($vetor); $numeroQuestao=0; foreach($vetor as $v) { $prova=$this->selecionar($v); $vetores=explode(',',$prova['questao']); $questao=array_shift($vetores); $numeroQuestao++; $this->imprimirQuestao($questao,$numeroQuestao); shuffle($vetores); $indicador=64; foreach($vetores as $alternativa) { $indicador++; echo chr($indicador) . ". " . $alternativa . "<br>"; } } } function imprimirQuestao($questao,$numeroQuestao) { echo "<br>"; echo $numeroQuestao . ". " . $questao . "<br>"; } function inicio() { view('provasView'); } function selecionar($id) { return $this->Conexao->query("select * from provas where id=$id") ->fetch_assoc(); } } arquivo provasView.php <form method=post action=?Provas.imprimir> Quais são as questões selecionadas? <br> <input name=questoes placeholder="exemplo: digite 4,3"> <br> <input type=submit> </form> Editado Setembro 21 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Lúcio Flávio da Silva Sales
Estou tendo dificuldade de passar essas querys por objeto:
A linha
return $listarProvas;
do arquivo Prova.php não repassa as variáveis $prova1 e $prova2 chamadas na linha
$listar_questoes = $listar_questoes->ListarProvas();
do arquivo prova.php.
Arquivo onde se encontra a função:
Prova.php
<?php
Class Provas
{
public function ListarProvas()
{
$objConexao = new Conexao();
$conexao = $objConexao->getConexao();
$sql = "select * from questoes where Id = 1";
$resposta = $conexao->query($sql);
$prova1 = $resposta->fetch_assoc();
$sql = "select * from questoes where Id = 2";
$resposta = $conexao->query($sql);
$prova2 = $resposta->fetch_assoc();
$listarProvas = new Provas($prova1,$prova2);
return $listarProvas;
}
}
?>
Arquivo onde os resultados devem ser apresentados
prova.php
<?php
$listar_questoes = new Provas();
$listar_questoes = $listar_questoes->ListarProvas();
Questão 1:
echo (isset ($prova1["Questao"])?$prova1["Questao"]:"");
(A) echo(isset ($prova1["Alt_A"])?$prova1["Alt_A"]:"");
(B) php echo(isset ($prova1["Alt_B"])?$prova1["Alt_B"]:"");
(C) php echo(isset ($prova1["Alt_C"])?$prova1["Alt_C"]:"");
(D) php echo(isset ($prova1["Alt_D"])?$prova1["Alt_D"]:"");
(E) php echo(isset ($prova1["Alt_E"])?$prova1["Alt_E"]:"");
Questão 2:
echo (isset ($prova2["Questao"])?$prova2["Questao"]:"");
(A) echo(isset ($prova2["Alt_A"])?$prova2["Alt_A"]:"");
(B) echo(isset ($prova2["Alt_B"])?$prova2["Alt_B"]:"");
(C) echo(isset ($prova2["Alt_C"])?$prova2["Alt_C"]:"");
(D) echo(isset ($prova2["Alt_D"])?$prova2["Alt_D"]:"");
(E) echo(isset ($prova2["Alt_E"])?$prova2["Alt_E"]:"");
?>
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
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.