0

$_POST['student'] != 0ドロップダウン メニューから個々の生徒を選択すると ( as 値がオプションを0表し、All他のすべてのオプションに独自の番号がある場合)、これは奇妙なことに、次のようなエラーが表示されます。

Notice: Undefined variable: questions in ... on line 597 Warning: Invalid argument supplied for foreach() in ... on line 597

私の質問は、このエラーの原因は何ですか?どうすれば修正できますか?

コードは、コード スニペットの下部近くに、コメントされているエラー行がある場所です。

    $selectedstudentanswerqry = "
        SELECT
        sa.StudentId, StudentAlias, StudentForename, StudentSurname
    ...
        FROM Student st
    ...
        ";

        // Initially empty
            $where = array('q.SessionId = ?');
            $parameters = array($_POST["session"]);
            $parameterTypes = 'i';


        //check if POST is empty

        // Check whether a specific student was selected

        $p_student = empty($_POST["student"])?0:$_POST["student"];  // Now if $_POST['student'] is either 0 or empty $p_student will be 0
        switch($p_student){
        case 0:
            //dont' add where filters
            break;
        default:
            $where[] = 'sa.StudentId = ?';
            $parameters[] .= $_POST["student"];
            $parameterTypes .= 'i';
        }

        // Check whether a specific question was selected
        $p_question = empty($_POST["question"])?0:$_POST["question"]; // Same here, if $_POST['question'] is either 0 or empty $p_question will be 0
            switch($p_question){
        case 0:
            //dont' add where filters 
            break;
        default:
            $where[] = 'q.QuestionId = ?';
            $parameters[] .= $_POST["question"];
            $parameterTypes .= 'i';
        }
        // If we added to $where in any of the conditionals, we need a WHERE clause in
        // our query
        if(!empty($where)) {
            $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where);
            // You only need to call bind_param once
    }




        $selectedstudentanswerqry .= "
          GROUP BY sa.StudentId, q.QuestionId
          ORDER BY StudentAlias, q.SessionId, QuestionNo
        ";


    global $mysqli;
    $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry);

    if (count($where) == 1) {
            $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0]);
        }
        else if (count($where) == 2) {
            $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1]);
        }
        else if (count($where) == 3) {
            $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1], $parameters[2]);
        }

    // get result and assign variables (prefix with db)
    $selectedstudentanswerstmt->execute(); 
    $selectedstudentanswerstmt->bind_result($detailsStudentId,$detailsStudentAlias,$detailsStudentForename,$detailsStudentSurname); 

    $selectedstudentanswerstmt->store_result();
    $selectedstudentanswernum = $selectedstudentanswerstmt->num_rows(); 

        $arrStudentId = array();
        $arrStudentAlias = array();
     ...

        while ($selectedstudentanswerstmt->fetch()) {

        //Check if the student data exist.
        if (!isset($questions[$detailsStudentId])) {
            $questions[$detailsStudentId] = array(
                'studentalias' => $detailsStudentAlias,
                'studentforename' => $detailsStudentForename,
                'studentsurname' => $detailsStudentSurname,
                'questions' => array()
            );
        }

        $questions[$detailsStudentId]['questions'][$detailsQuestionId] = array(
            'questionno'=>$detailsQuestionNo,
            'content'=>$detailsQuestionContent,
    .....
        );
    }

    $selectedstudentanswerstmt->close();
    ?>

//LINE 597 ERROR BELOW
    foreach ($questions as $studentId => $studentData) {
        echo '<hr><h3>'.$studentData['studentalias'].' - '.$studentData['studentforename'].' '.$studentData['studentsurname'].'</h3>';

        foreach ($studentData['questions'] as $questionId => $questionData) {
            echo '<h3>'.$questionData['questionno'].': '.$questionData['content'].'</h3>';
    }
    }
4

1 に答える 1

0

変数$questions自体の初期化が問題になる可能性があります。コードを調べて、のようなもの$questions =がどこで呼び出されているかを確認します。おそらくそれは、実行されないifステートメント内で毎回です。

電話をかける場合:

$questions[...]

$questions配列として初期化されることはありません。また、問題が発生します。したがって、次のように初期化する必要があります$questions

$questions = array();

この後、配列のフィールドへのアクセスに問題はありません。

于 2013-02-19T17:29:25.077 に答える