2016-03-22 27 views
0

Bir soru için çok sayıda cevabı olan bir sınav hazırlıyorum. Onay kutuları bir dizi kullanılarak saklanır ve answers_bank tablomda ab_name sütununa göre kontrol edilir (doğru cevaplar depolanır).Checkbox Quiz Çoktan Seçmeli

Tek yapmam gereken - kontrol edilen cevaplar answer_bank tablosunda ise echo'nun "doğru" olması durumunda, yanlış kontrol edilen kutular için yankı "yanlış" olur.

Yapmaya çalıştığım yol, her yineleme sırasında dizideki her bir yanıtı karşılaştırdığı ve diğer yanıtlar için yanlış döndüğü (eşit olmadığı için) çalışmaz. Görüntünün ilk bölümünde gösterildiği gibi

onay kutusu soruları İade: Ben kurulum var

İşte enter image description here

kod snippet'idir: Bu resim ben yaşıyorum sorunu açıklamalıdır cevaplar

doğru olmadığını

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 
} 
?> 
kontrol Hedefliyor Bu yapabilirsiniz
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>"; 
      } 

     } 
    } 
} 

}

Başka çözeltiler veya düzeltmeler? Çok teşekkürler!

+0

Bazı kodları kaçırdığımıza dair bir fikrim var, açıkçası cevabı kontrol eden kodlara bir kereden fazla denir. – Epodax

+0

@Epodax Daha fazla kod ekledim, her yanıtın db'ye karşı nasıl olduğunu kontrol etmek için db – StackMeUp123

+0

Çok fazla döngü kullanıyorsunuz, Döngülerden birini çıkarmanız veya birbirinizin içine girmemesi gerekiyor. Bunun nedeni, veritabanı sonucunu ilk kez döngülemenizdir ve her bir döngü doğru bir yanıttır, sonra POST verileriyle döngü yapmaya devam edersiniz ve "Siz" dediniz. – Epodax

cevap

2

İlk olarak tüm doğru cevapları saklayın, böylece hem bunlara hem de formdaki yanıtlara geçiş yapmanız gerekmez. Bunun yerine, form yanıtları üzerinde geçiş yapabilir ve seçilen değerin doğru yanıt dizisinde olup olmadığını kontrol edebilirsiniz.

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(); 

$correct_answers = array(); 
foreach ($qresults as $cresults) { 
    array_push($correct_answers, $cresults["ab_name"]); 
} 

if (is_array($q_answer)) { 
    foreach ($q_answer as $checkbox) { 
     if (in_array($checkbox, $correct_answers)) { 
      echo "You said : " . $checkbox . " ... which is the correct answer!</br>"; 
     } else { 
      echo "You said : " . $checkbox . " ... which is incorrect</br>"; 
     } 

    } 
} 
+0

Bunu daha önce neredeyse özdeş bir yaklaşımla denedim. Çıkıyor benim foreach döngülerimi yanlış kullanıyordum. Bu şimdi bir rüya gibi çalışıyor, teşekkürler! – StackMeUp123