私は1つの質問に対して多くの回答を持つことができるクイズを設定中です。チェックボックスは配列を使用して格納され、ab_name
カラム(正解が格納されている)を使用しているanswers_bank
テーブルに対してチェックされています。チェックボックスクイズ複数選択
私がしたいのは、チェックされている回答がanswers_bankテーブルにある場合、「正しい」とエコーされます。そうでない場合は、誤ったチェックボックスがエコーされます。
私が試したやり方はうまくいきません。各反復中に配列内の個々の答えを比較し、他の答え(それが等しくないため)を正しく返しません。この画像は、私が午前問題を説明しなければならない。ここで
は、私が設定しているコードの抜粋です:イメージの最初の部分に示すように
は、チェックボックスの質問を返します。
foreach ($qresults as $aresults) {
$selected = $aresults["ab_name"];
$ab_id = $aresults["ab_id"];
?>
<input type="checkbox" name="checkbox[]"
value="<?php echo $aresults["ab_name"]; ?>"> <?php echo $aresults["ab_name"]; ?> <br>
<?php
}
?>
の答えが正しいかどうか
かどうかを確認するために目指します私はこれを行うことができますforeach ($results as $row) {
$qb_id = $row['qb_id'];
$q_answer = $_POST["q$qb_id"];
$sql = "SELECT * FROM answers_bank WHERE ab_qb_id = :qb_id AND ab_correct = :correct";
$stmt = $db->prepare($sql);
$stmt->bindValue(':qb_id', $qb_id);
$stmt->bindValue(':correct', "correct");
$stmt->execute();
$qresults = $stmt->fetchAll();
foreach ($qresults as $cresults) {
if (is_array($q_answer)) {
foreach ($q_answer as $checkbox) {
if ($checkbox == $cresults["ab_name"]) {
echo "You said : " . $checkbox . " ... which is the correct answer!</br>";
} else if ($checkbox != $cresults["ab_name"]) {
echo "You said : " . $checkbox . " ... which is incorrect</br>";
}
}
}
}
}
任意の他のソリューションや修正?どうもありがとう!
私はいくつかのコードが不足していると感じていますが、明らかに答えを確認するコードは複数回呼び出されています。 – Epodax
@Epodax db内の各回答に対してどのようにチェックするかを示すコードを追加しました – StackMeUp123
あなたはあまりにも多くのループを使用しています。ループの1つを削除する必要があります。これが起こっている理由は、最初にデータベースの結果をループしており、そこにある各ループが正解であるため、POSTデータをループして「あなたが言った」ようにエコーします。 – Epodax