setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "
๐งช TEST QUERY BERITA
";
echo "
";
// Ambil sample santri
$stmt = $pdo->query("SELECT id_santri, nama_lengkap, kelas FROM santris WHERE status = 'Aktif' LIMIT 1");
$santri = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$santri) {
die("โ Tidak ada santri aktif di database!
");
}
$idSantri = $santri['id_santri'];
$kelasSantri = $santri['kelas'];
echo "๐จโ๐ Testing dengan Santri:
";
echo "ID: {$idSantri}
";
echo "Nama: {$santri['nama_lengkap']}
";
echo "Kelas: {$kelasSantri}
";
echo "
";
// Test Query 1: Berita untuk SEMUA
echo "1๏ธโฃ Berita untuk SEMUA SANTRI
";
$sql = "SELECT id_berita, judul FROM berita WHERE status = 'published' AND target_berita = 'semua'";
$stmt = $pdo->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Jumlah: " . count($result) . "
";
foreach ($result as $row) {
echo "- {$row['id_berita']}: {$row['judul']}
";
}
echo "
";
// Test Query 2: Berita untuk KELAS TERTENTU
echo "2๏ธโฃ Berita untuk KELAS TERTENTU (Kelas: {$kelasSantri})
";
$sql = "SELECT id_berita, judul, target_kelas
FROM berita
WHERE status = 'published'
AND target_berita = 'kelas_tertentu'
AND JSON_CONTAINS(target_kelas, '\"{$kelasSantri}\"')";
$stmt = $pdo->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Jumlah: " . count($result) . "
";
foreach ($result as $row) {
echo "- {$row['id_berita']}: {$row['judul']} (Target Kelas: {$row['target_kelas']})
";
}
echo "
";
// Test Query 3: Berita untuk SANTRI TERTENTU (FIX VERSION)
echo "3๏ธโฃ Berita untuk SANTRI TERTENTU (ID: {$idSantri})
";
// Versi yang BENAR - menggunakan prepared statement untuk menghindari SQL injection
$sql = "SELECT b.id_berita, b.judul
FROM berita b
WHERE b.status = 'published'
AND b.target_berita = 'santri_tertentu'
AND EXISTS (
SELECT 1
FROM berita_santri bs
WHERE bs.id_berita = b.id_berita
AND bs.id_santri = :id_santri
)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id_santri' => $idSantri]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Jumlah: " . count($result) . "
";
foreach ($result as $row) {
echo "- {$row['id_berita']}: {$row['judul']}
";
}
// Cek pivot table
echo "๐ Data di Pivot Table untuk Santri ini:
";
$sql = "SELECT bs.id_berita, b.judul, bs.sudah_dibaca
FROM berita_santri bs
LEFT JOIN berita b ON bs.id_berita = b.id_berita
WHERE bs.id_santri = :id_santri";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id_santri' => $idSantri]);
$pivot = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($pivot)) {
echo "โ ๏ธ Tidak ada data di pivot table untuk santri ini
";
} else {
foreach ($pivot as $row) {
$status = $row['sudah_dibaca'] ? 'โ
Sudah dibaca' : 'โ Belum dibaca';
echo "- {$row['id_berita']}: {$row['judul']} ({$status})
";
}
}
echo "
";
// Test Query GABUNGAN (seperti di API)
echo "๐ฏ QUERY GABUNGAN (Seperti di API)
";
$sql = "SELECT b.id_berita, b.judul, b.target_berita
FROM berita b
WHERE b.status = 'published'
AND (
-- SEMUA
b.target_berita = 'semua'
-- KELAS TERTENTU
OR (
b.target_berita = 'kelas_tertentu'
AND JSON_CONTAINS(b.target_kelas, '\"{$kelasSantri}\"')
)
-- SANTRI TERTENTU
OR (
b.target_berita = 'santri_tertentu'
AND EXISTS (
SELECT 1
FROM berita_santri bs
WHERE bs.id_berita = b.id_berita
AND bs.id_santri = :id_santri
)
)
)
ORDER BY b.created_at DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id_santri' => $idSantri]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "TOTAL BERITA YANG BISA DILIHAT SANTRI INI: " . count($result) . "
";
if (empty($result)) {
echo "โ TIDAK ADA BERITA!
";
echo "๐ก Solusi:
";
echo "";
echo "- Buat berita dengan target 'Semua Santri', atau
";
echo "- Buat berita dengan target 'Kelas: {$kelasSantri}', atau
";
echo "- Buat berita dengan target 'Santri Tertentu' dan tambahkan santri ini ke pivot table
";
echo "
";
} else {
echo "";
echo "| ID | Judul | Target |
";
foreach ($result as $row) {
echo "";
echo "| {$row['id_berita']} | ";
echo "{$row['judul']} | ";
echo "{$row['target_berita']} | ";
echo "
";
}
echo "
";
}
echo "
";
echo "โ
TEST SELESAI
";
echo "Jika query gabungan menampilkan berita, berarti API seharusnya juga akan menampilkan berita yang sama.
";
} catch (PDOException $e) {
echo "โ ERROR
";
echo "{$e->getMessage()}
";
}
?>