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 soalSoal kepribadian memiliki dua pernyataan (L / R), tanpa skor benar atau salah.