296 lines
13 KiB
PHP
296 lines
13 KiB
PHP
<?php
|
|
// Menginclude file header.php
|
|
include 'header.php';
|
|
|
|
// Menonaktifkan tampilan pesan error PHP
|
|
ini_set('display_errors', 0);
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$gejala_terpilih = $_POST['gejala'];
|
|
|
|
if (empty($gejala_terpilih) || count($gejala_terpilih) < 2) {
|
|
echo "<script>alert('Pilih minimal 2 gejala!'); window.location.href='diagnosis.php';</script>";
|
|
exit;
|
|
}
|
|
|
|
|
|
$gejala_in = "'" . implode("','", $gejala_terpilih) . "'";
|
|
|
|
// Step 1: Ambil daftar penyakit
|
|
$query_penyakit = "SELECT idpenyakit, kode_penyakit, namapenyakit FROM penyakit";
|
|
$result_penyakit = $koneksi->query($query_penyakit);
|
|
|
|
if (!$result_penyakit) {
|
|
die("Query penyakit gagal: " . $koneksi->error);
|
|
}
|
|
|
|
$penyakit_diagnosa = [];
|
|
while ($row = $result_penyakit->fetch_assoc()) {
|
|
$penyakit_diagnosa[$row['kode_penyakit']] = [
|
|
'kode_penyakit' => $row['kode_penyakit'],
|
|
'nama_penyakit' => $row['namapenyakit'],
|
|
'gejala' => [],
|
|
'jumlah_gejala' => 0,
|
|
'total_bobot' => 0,
|
|
'nilai_dominan' => 0 // Akan dijumlahkan nanti
|
|
];
|
|
}
|
|
|
|
// Step 2: Ambil nilai fuzzy gejala
|
|
$query_fuzzy = "SELECT kode_gejala, kode_penyakit, nilai FROM penyakit_gejala WHERE kode_gejala IN ($gejala_in)";
|
|
$result_fuzzy = $koneksi->query($query_fuzzy);
|
|
|
|
if (!$result_fuzzy) {
|
|
die("Query fuzzy gagal: " . $koneksi->error);
|
|
}
|
|
|
|
while ($row = $result_fuzzy->fetch_assoc()) {
|
|
$kode_penyakit = $row['kode_penyakit'];
|
|
$penyakit_diagnosa[$kode_penyakit]['gejala'][] = $row['nilai'];
|
|
$penyakit_diagnosa[$kode_penyakit]['jumlah_gejala']++;
|
|
|
|
// Menjumlahkan nilai fuzzy dari semua gejala untuk nilai dominan
|
|
$penyakit_diagnosa[$kode_penyakit]['nilai_dominan'] += $row['nilai'];
|
|
}
|
|
|
|
// Step 3: Hitung total bobot untuk setiap penyakit
|
|
foreach ($penyakit_diagnosa as $kode_penyakit => $data) {
|
|
if (!empty($data['gejala'])) {
|
|
$penyakit_diagnosa[$kode_penyakit]['total_bobot'] = array_sum($data['gejala']);
|
|
}
|
|
}
|
|
|
|
// Step 4: Tentukan penyakit dengan jumlah gejala terbanyak
|
|
$penyakit_terpilih = "";
|
|
$nama_penyakit = "";
|
|
$jumlah_gejala_terbanyak = 0;
|
|
$total_bobot_tertinggi = 0;
|
|
$nilai_dominan_tertinggi = 0;
|
|
|
|
foreach ($penyakit_diagnosa as $data) {
|
|
if (
|
|
$data['jumlah_gejala'] > $jumlah_gejala_terbanyak ||
|
|
($data['jumlah_gejala'] == $jumlah_gejala_terbanyak && $data['total_bobot'] > $total_bobot_tertinggi) ||
|
|
($data['jumlah_gejala'] == $jumlah_gejala_terbanyak && $data['total_bobot'] == $total_bobot_tertinggi && $data['nilai_dominan'] > $nilai_dominan_tertinggi)
|
|
) {
|
|
$penyakit_terpilih = $data['kode_penyakit'];
|
|
$nama_penyakit = $data['nama_penyakit'];
|
|
$jumlah_gejala_terbanyak = $data['jumlah_gejala'];
|
|
$total_bobot_tertinggi = $data['total_bobot'];
|
|
$nilai_dominan_tertinggi = $data['nilai_dominan'];
|
|
}
|
|
}
|
|
|
|
if (empty($penyakit_terpilih)) {
|
|
$penyakit_terpilih = "Penyakit tidak terdeteksi";
|
|
}
|
|
}
|
|
?>
|
|
|
|
<!-- Halaman Diagnosis -->
|
|
<div class="kontainer-besar halaman-atas jarakbawahatas-5 mb-5 wow fadeIn" data-wow-delay="0.1s">
|
|
<div class="kontainer teks-tengah jarakbawahatas-5">
|
|
<h1 class="tampilan-3 teks-hitam jarakbawah-4 animated slideInDown" style="color:white!important">Diagnosis</h1>
|
|
<nav aria-label="bagian-atas animated slideInDown">
|
|
<ol class="bagian-atas konten-tengah mb-0">
|
|
<li class="bagian-atas-item"><a href="index.php">Home</a></li>
|
|
<li class="bagian-atas-item active" aria-current="page">Diagnosis</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="kontainer-xxl jarakbawahatas-5">
|
|
<div class="kontainer">
|
|
<div class="teks-tengah mx-auto wow fadeInUp" data-wow-delay="0.1s" style="max-width: 500px;">
|
|
<p class="judul background-putih teks-tengah warnateks-utama jarakkirikanan-3">Diagnosis</p>
|
|
<h1 class="mb-5">Form Diagnosis Tembakau</h1>
|
|
</div>
|
|
|
|
<!-- Formulir Diagnosis -->
|
|
<form action="diagnosis.php" method="POST">
|
|
<div class="form-group">
|
|
<label for="gejala" class="font-weight-bold" style="font-size:15pt">Pilih Gejala yang Dialami (minimal 2):</label>
|
|
<div class="row">
|
|
<?php
|
|
// Mengambil daftar gejala dari tabel gejala
|
|
$query_gejala = "SELECT * FROM gejala";
|
|
$result_gejala = $koneksi->query($query_gejala);
|
|
$gejala_list = $result_gejala->fetch_all(MYSQLI_ASSOC);
|
|
|
|
foreach ($gejala_list as $row) {
|
|
?>
|
|
<div class="col-md-4">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="gejala[]" value="<?= $row['kodegejala'] ?>" id="gejala<?= $row['kodegejala'] ?>" style="width: 25px; height: 25px;">
|
|
<label class="form-check-label" for="gejala<?= $row['kodegejala'] ?>" style="font-size: 15pt;">
|
|
<?= $row['kodegejala'] ?> - <?= $row['gejala'] ?>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
|
|
<button type="submit" class="tombol tombol-kedua mt-4">Diagnosa</button>
|
|
</form>
|
|
|
|
<script>
|
|
document.querySelector("form").addEventListener("submit", function(e) {
|
|
const checkboxes = document.querySelectorAll("input[name='gejala[]']:checked");
|
|
if (checkboxes.length < 2) {
|
|
alert("Pilih minimal 2 gejala!");
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST'): ?>
|
|
<div class="mt-5">
|
|
<!-- <h4>Hasil Diagnosa :</h4>
|
|
<h5>1. Fuzzyfikasi</h5>
|
|
<p>Fuzzyfikasi dilakukan dengan menghitung nilai bobot setiap gejala yang terpilih dan membandingkannya dengan total bobot gejala.</p>
|
|
|
|
<table class="table table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Penyakit</th>
|
|
<th>Total Bobot</th>
|
|
<th>Gejala yang Terpilih</th>
|
|
<th>Nilai Dominan</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($penyakit_diagnosa as $penyakit_id => $data): ?>
|
|
<tr>
|
|
<td><?php echo $data['kode_penyakit']; ?></td>
|
|
<td><?php echo number_format($data['total_bobot'], 2); ?></td>
|
|
<td><?php echo implode(", ", $data['gejala']); ?></td>
|
|
<td><?php echo number_format($data['nilai_dominan'], 2); ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h5>2. Agregasi</h5>
|
|
<p>Proses agregasi dilakukan dengan memilih nilai maksimum dari nilai fuzzy setiap penyakit.</p>
|
|
<p><strong>Maks = <?php echo number_format($nilai_dominan_tertinggi, 2); ?></strong></p>
|
|
<p>Nilai dominan terbesar didapatkan dari penyakit <strong><?php echo $penyakit_terpilih; ?></strong>.</p> -->
|
|
|
|
|
|
<!-- <p>Defuzzyfikasi dilakukan untuk menghitung hasil akhir berdasarkan bobot dominan, dengan tujuan untuk memperoleh nilai persentase diagnosa.</p> -->
|
|
|
|
<!-- <p><strong>Total Bobot Penyakit = </strong>
|
|
<?php
|
|
$nilai_total_bobot = array_sum(array_column($penyakit_diagnosa, 'nilai_dominan'));
|
|
echo number_format($nilai_total_bobot, 2);
|
|
?>
|
|
</p>
|
|
|
|
<table class="table table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Penyakit</th>
|
|
<th>Nilai Dominan</th>
|
|
<th>Presentase</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
foreach ($penyakit_diagnosa as $penyakit_id => $data):
|
|
$presentase = $nilai_total_bobot > 0 ? ($data['nilai_dominan'] / $nilai_total_bobot) * 100 : 0;
|
|
?>
|
|
<tr>
|
|
<td><?php echo $data['kode_penyakit']; ?></td>
|
|
<td><?php echo number_format($data['nilai_dominan'], 2); ?></td>
|
|
<td><?php echo number_format($presentase, 2); ?>%</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table> -->
|
|
<?php
|
|
// Ubah array menjadi format string untuk SQL IN()
|
|
$kode_gejala_string = "'" . implode("','", $gejala_terpilih) . "'";
|
|
|
|
// Query untuk ambil data dari tabel gejala
|
|
$sql = "SELECT kodegejala, gejala FROM gejala WHERE kodegejala IN ($kode_gejala_string)";
|
|
$result = $koneksi->query($sql);
|
|
|
|
// Simpan hasil ke dalam array
|
|
$daftar_gejala = [];
|
|
while ($row = $result->fetch_assoc()) {
|
|
$daftar_gejala[$row['kodegejala']] = $row['gejala'];
|
|
}
|
|
?>
|
|
|
|
<p><strong>Gejala yang dipilih:</strong></p>
|
|
<ul>
|
|
<?php foreach ($gejala_terpilih as $kode): ?>
|
|
<li><?php echo $kode . ' - ' . $daftar_gejala[$kode]; ?></li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
|
|
<?php
|
|
$penjelasan = "";
|
|
if ($penyakit_terpilih !== "Penyakit tidak terdeteksi") {
|
|
$query_penjelasan = "SELECT penjelasan FROM penyakit WHERE kode_penyakit = '$penyakit_terpilih'";
|
|
$result_penjelasan = $koneksi->query($query_penjelasan);
|
|
if ($result_penjelasan && $row_penjelasan = $result_penjelasan->fetch_assoc()) {
|
|
$penjelasan = $row_penjelasan['penjelasan'];
|
|
}
|
|
}
|
|
?>
|
|
|
|
<?php
|
|
$presentase = $nilai_total_bobot > 0 ? ($nilai_dominan_tertinggi / $nilai_total_bobot) * 100 : 0;
|
|
$presentaseFormatted = number_format($presentase, 2);
|
|
?>
|
|
|
|
<p><strong>Kesimpulan:</strong></p>
|
|
<p>Dari gejala yang Anda pilih, sistem mendiagnosis kemungkinan besar tanaman Anda terserang <strong><?= $penyakit_terpilih; ?> - <?= $nama_penyakit ?></strong>.</p>
|
|
<p><strong>Tingkat Kepastian: <?= $presentaseFormatted ?>%</strong></p>
|
|
|
|
<?php if ($presentase >= 99): ?>
|
|
<p>Semua gejala yang Anda pilih cocok dengan gejala penyakit <strong><?= $nama_penyakit ?></strong>, sehingga kemungkinan besar tanaman Anda terkena penyakit ini.</p>
|
|
<?php elseif ($presentase >= 70): ?>
|
|
<p>Gejala yang Anda pilih sebagian besar cocok dengan penyakit <strong><?= $nama_penyakit ?></strong>, namun ada beberapa gejala yang juga mirip dengan penyakit lain. Sebaiknya lakukan pemeriksaan lebih lanjut.</p>
|
|
<?php else: ?>
|
|
<p>Gejala yang Anda pilih belum sepenuhnya mengarah pada satu penyakit tertentu. Tingkat kepastian masih rendah, sehingga disarankan untuk meninjau ulang kondisi tanaman anda.</p>
|
|
<?php endif; ?>
|
|
|
|
<?php if (!empty($penjelasan)): ?>
|
|
<p><strong>Penjelasan Penyakit:</strong></p>
|
|
<p><?= nl2br($penjelasan) ?></p>
|
|
<?php endif; ?>
|
|
|
|
<div class="kolom-sedang-12">
|
|
<label class="mb-2">Solusi</label>
|
|
<textarea rows="10" name="solusi" class="gaya-formulir" readonly>
|
|
<?php
|
|
// Menampilkan solusi berdasarkan penyakit terpilih
|
|
if ($penyakit_terpilih !== "Penyakit tidak terdeteksi") {
|
|
// Query untuk mengambil solusi dari tabel penyakit berdasarkan penyakit yang terpilih
|
|
$query_solusi = "SELECT solusi FROM penyakit WHERE kode_penyakit = '$penyakit_terpilih'";
|
|
$result_solusi = $koneksi->query($query_solusi);
|
|
|
|
if ($result_solusi && $row_solusi = $result_solusi->fetch_assoc()) {
|
|
echo $row_solusi['solusi'];
|
|
} else {
|
|
echo "Solusi untuk penyakit ini belum tersedia.";
|
|
}
|
|
} else {
|
|
echo "Penyakit tidak terdeteksi. Tidak ada solusi yang dapat diberikan.";
|
|
}
|
|
?>
|
|
</textarea>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<?php include 'footer.php'; ?>
|