我尝试使用Codeigniter2.2.4进行简单的测验,但我在检查答案时遇到了一些问题。 我有以下结构: 控制器:猜猜看 模特:人 观点:guessview,结果
在我的人类课程中,我有一种方法可以从数据库中获取所有问题并获得随机问题。我在检查答案是否正确时遇到问题。它总是回来假的
function getQuestions()
{
if(!isset($questions))
{
$this->db->select("id, name, choice1, choice2, correctAnswer");
$this->db->from('questions');
$query = $this->db->get();
foreach ($query->result() as $row) {
$questions[] = $row;
}
}
return $questions;
}
function getRandomQuestion()
{
$max = count($this->getQuestions());
$randpos = rand(0, $max-1);
$question = $this->getQuestions()[$randpos];
return $question;
}
在我的控制器中:
function guess()
{
$answer = $this->input->get('answers',false);
//$questionId = $this->input->get('id',false);
//this will generate random questions.
$newQuestion = $this->people->getRandomQuestion();
$this->load->view('guessview',$newQuestion);
//this is always false
if($answer == $newQuestion->correctAnswer)
{
//do something
}
}
在我看来,我只有一个表格,一次只显示一个问题。
//更新 使用您提供的功能时,我在控制器和视图中出现了一些错误。我尝试在我的控制器中抓取一个问题
$question = $this->people->getRandomQuestion();
//这给了我未定义的索引correctAnswer但是它应该没有,因为数据库表具有以下结构:id,name,choice1,choice2,correctAnswer?
if($question['correctAnswer'] == $answer)
{
}
当我想将数据传递给视图时,即
$question = $this->people->getRandomQuestion();
$data['question'] = $question;
$this->load->view('guessview',$data);
在我看来,我尝试过这样的形式值:$ question [' name'],$ question [' id']我得到未定义的索引名称,id等
我的表格来自guessview.php
<form id= "form1" class="form" action="<?php echo base_url();?>guess/people" method='POST'>
<input type=hidden name=id value="<?php echo $question['id'] ?>">
<label><?php echo $question['name'] ?>
<div class="radio">
<label>
<input type="radio" id='rad1' name="answers" value="<?php echo $question['choice1'] ?>">
<?php echo $question['choice1'] ?>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="answers" value="<?php echo $question['choice2'] ?>">
<?php echo $question['choice2'] ?>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="answers" value="<?php echo $question['correctAnswer'] ?>">
<?php echo $question['correctAnswer'] ?>
</label>
<div>
<input type=submit name="sub" value="Answer">
</div>
</form>
我发布的问题被认为是控制器功能。似乎当我尝试检查用户是否正确回答时总是错误的。就像用户回答上一个问题的内容一样,将其与当前问题的正确答案进行比较。
我尝试获取单选按钮和id的输入(放入隐藏字段) 如果它们返回错误,则表示没有问题显示并显示第一个问题。否则,如果有输入,则根据id得到问题,并将问题的正确答案与用户选择的问题进行比较。(但就像我上面说的那样,它总是假的)。我回家后会发布这个方法。
答案 0 :(得分:0)
您可以在单个模型功能
中执行此操作function getRandomQuestion()
{
$sql = "SELECT * FROM questions ORDER BY RAND() LIMIT 1 )";
$query = $this->db->query($sql);
$result = $query->result_array();
$count = count($result);
if (empty($count) ||$count > 1) {
echo "Inavliad Question";
}
else{
return $result;
}
}