0

PHPで間違った回答のリストを作成することにより、各質問の間違った回答を取得しようとしています。たとえば、元のクエリから単一の行を含めて、次のように間違った答えを計算します。

 $query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionNo, an.Answer, an.AnswerId 
   FROM Session s  
   INNER JOIN Question q ON s.SessionId = q.SessionId 
   JOIN Answer an ON q.QuestionId = an.QuestionId 
   WHERE s.SessionName = ? 
   ORDER BY q.QuestionId, an.Answer 
   "; 
       
   // prepare query 
   $stmt=$mysqli->prepare($query); 
   // You only need to call bind_param once 
   $stmt->bind_param("s", $assessment); 
   // execute query 
   $stmt->execute();  
   
   $specialOptionTypes = array( 
    'Yes or No' => array( 'Y', 'N' ), 
    'True or False' => array( 'T', 'F' ), 
); 

// Do this for each row: 
if ( array_key_exists( $row->OptionType, $specialOptionTypes ) ) { 
    $options = $specialOptionTypes[ $row->OptionType ]; 
} else if ( preg_match( '/^([A-Z])-([A-Z])$/', $row->OptionType, $match ) ) { 
    $options = range( $match[1], $match[2] ); 
} else { 
    // issue warning about unrecognized option type 
    $options = array(); 
} 
$right = str_split( $row->Answer );  // or explode() on a delimiter, if any 
$wrong = array_diff( $options, $right ); 



    // Fetch the results into an array 

   // get result and assign variables (prefix with db) 
   $stmt->bind_result($dbSessionId, $dbSessionName, $dbQuestionId, $dbQuestionNo, $dbAnswer, $dbAnswerId); 
      while ($stmt->fetch()) { 
         
      $incorrect_ans[] = $wrong; 

      }     
       
       
      .... 
       
      //table row 
       
      <td class="answertd" name="incorrectanswers[]"><?php
echo $incorrect_ans[$key];
?></td> 

私が抱えている問題は、間違った答えが得られないことですが、代わりにいくつかのエラーが発生することです:

最初のエラーは、$row上記のコードに示されている変数に対するものです。

Notice: 未定義の変数: 行中 ... 行中 ...

Notice: 行中 ... で非オブジェクトのプロパティを取得しようとしています ...

2 番目の問題は、不正解を表示する代わりに上の表の行にあり、 と表示されますArray

私の質問は、通知と配列を修正して、少なくともエラーのないアプリケーションを作成するにはどうすればよいですか?

4

1 に答える 1

0

$rowif ステートメントの外側で初期化しないと、未定義になります。

これは$row、オブジェクトではないことを意味します。おそらく、アクセスできないため、場合によっては (何も見つからない) NULL または false です。範囲外

于 2013-01-09T17:15:45.670 に答える