0

作業中のWebサイトに対して一連のクイズを作成していますが、ユーザーデータの保存に少し問題があります。構造が少し変わっているので、問題が発生する可能性があります。私のクイズコントローラーにはQuiz1、Quiz2などのラベルが付けられており、jqueryでリッスンされるQuizzerという関数をロードします。クイズページでラジオボタンがクリックされるたびに、jqueryはクイズをアクティブにしてユーザー入力を記録します。サンプルコードは次のとおりです。

これは、ページをロードするコードです。

    public function Quiz4(){
    $this->load->view("site_header");
    $this->load->view("site_nav");
    $this->load->model("quiz_model");
    $this->data['choices'] = $this->quiz_model->get_records('quiz_4');
    $this->load->view("student/quiztest", $this->data);

    $quiz = 4;

    $this->Quizzer($quiz);

    $this->load->view("site_footer");
}

値4がクイズに渡されるため、データベースに書き込むクイズがわかります。

これはコントローラークイズです:

    public function Quizzer($qid){
    $this->load->model("quiz_model");
    $user = $this->ion_auth->user()->row();
    $user_id = $user->id;
    $data = array(
        'answer' => $this->input->post('answer')
    );
    $question = $this->input->post('question');

            echo $qid;

    $this->quiz_model->update_record($data, $user_id, $qid, $question);
}

$ user_idは、どのユーザーが$ dataにログインしているかを示し、$ questionは、ユーザーがどのグループからどのラジオボタンをクリックしたかを識別します。

$ qidは、ユーザーがどのクイズページを表示しているかを示す必要があります。このテストの場合、4がエコーアウトされたため、データを取得していることがわかりますが、データベースには書き込まれません。$ qidの代わりに4を手動で入力すると関数が機能することがわかりましたが、現在の$qid変数は受け入れられません。

これは、データベースへの保存を行うモデル関数です。

    function update_record($data, $uid, $quiz, $question)
{
    echo $quiz;
    $this->db->where('uid', $uid);
    $this->db->where('quiz', (int)$quiz);
    $this->db->where('question', $question);
    $this->db->update('quiz_results', $data);
}

データ型を一致させるために$quizをintにキャストしようとしましたが、このトリックも機能しません。4を手動で入力する場合と変数として渡す場合の関数の動作に基づいて、データの型に問題があるように見えます(これが型キャストを試みた理由です)。

4

1 に答える 1

0

quiz_modelこれの代わりに、正しく設計されている場合:

$this->quiz_model->update_record($data, $user_id, $qid, $question);

..あなたがすべきこと:

$this->quiz_model->data = $data;
$this->quiz_model->user_id = $user_id;
...
$this->quiz_model->update();

Quizまた、複数のコントローラーではなく、単一のコントローラーを使用する必要がありますQuizN。そして最後に、コントローラーが他のコントローラーを呼び出すようにすることは、一般的に設計が悪いと考えられています。しなければならないと感じた状況に陥りましたが、それは避けるべきです。そのために、コントローラーがカプセル化できず、コントローラーがまったくないためにコントローラーがQuiz提供するものは何ですか?QuizzerQuiz

乾杯

于 2012-08-03T18:33:58.740 に答える