Soal tidak ditemukan.

'; page_end(); exit; } if($id) $used=(int)one('SELECT COUNT(*) n FROM in_jawab WHERE isoal=?','i',[$id])['n']; } if($_SERVER['REQUEST_METHOD']==='POST') { verify_csrf(); foreach($fields as $field) $s[$field]=trim($_POST[$field]??''); $category=(int)$s['kat']; $deleting=($_POST['action']??'')==='delete'; if($deleting && !$id) $error='Soal belum tersimpan.'; elseif(!isset(CATEGORIES[$category]) || $s['soal']==='' || ($category===5 && $s['soal1']==='') || ($category!==5 && $s['kunci']==='')) $error='Lengkapi kategori, soal, dan kunci jawaban (atau pilihan R untuk kepribadian).'; else { foreach(['opa','opb','opc','opd','ope'] as $field) if(strlen($s[$field])>100) $error='Pilihan jawaban maksimal 100 karakter.'; if(strlen($s['kunci'])>200) $error='Kunci jawaban maksimal 200 karakter.'; if(!$error) { db()->begin_transaction(); try { if($id) { one('SELECT id FROM in_soal WHERE id=? FOR UPDATE','i',[$id]); if(one('SELECT id FROM in_jawab WHERE isoal=? LIMIT 1','i',[$id])) throw new InvalidArgumentException('Soal sudah digunakan peserta. Duplikat soal untuk membuat versi baru; riwayat hasil harus dipertahankan.'); } if($deleting) query('DELETE FROM in_soal WHERE id=?','i',[$id]); elseif($id) query('UPDATE in_soal SET kat=?,soal=?,soal1=?,opa=?,opb=?,opc=?,opd=?,ope=?,kunci=? WHERE id=?','issssssssi',[$category,$s['soal'],$s['soal1'],$s['opa'],$s['opb'],$s['opc'],$s['opd'],$s['ope'],$s['kunci'],$id]); else query('INSERT INTO in_soal(kat,soal,soal1,opa,opb,opc,opd,ope,kunci) VALUES(?,?,?,?,?,?,?,?,?)','issssssss',[$category,$s['soal'],$s['soal1'],$s['opa'],$s['opb'],$s['opc'],$s['opd'],$s['ope'],$s['kunci']]); db()->commit(); $_SESSION['flash']=$deleting?'Soal dihapus.':'Soal berhasil disimpan.'; redirect('isoal.php'); } catch(InvalidArgumentException $ex) { db()->rollback(); $error=$ex->getMessage(); } catch(Throwable $ex) { db()->rollback(); throw $ex; } } } } page_start($id?'Detail soal #'.$id:($copy?'Duplikat soal':'Tambah soal'),'questions'); ?>← Bank soal

Soal kepribadian memiliki dua pernyataan (L / R), tanpa skor benar atau salah.

Soal ini sudah memiliki jawaban. Isi dikunci untuk menjaga riwayat penilaian. Duplikat akan menjadi soal tambahan yang juga masuk dalam pengacakan tes.
Duplikat sebagai soal baru →
>
Pilihan jawaban A–E (jika digunakan)

Alur tes saat ini memakai jawaban teks untuk kategori 1–4. Pilihan ini disimpan sebagai bagian bank soal.

'A','opb'=>'B','opc'=>'C','opd'=>'D','ope'=>'E'] as $key=>$label): ?>