Disil / edubridge

A website to choose college majors based on grades, skills, and hobbies
GNU General Public License v3.0
1 stars 0 forks source link

[URGENT] mysqli_sql_exception setelah input nilai rapot #23

Closed Disil closed 1 month ago

Disil commented 1 month ago

Setiap ada siswa baru memasukkan nilai, akan ada error ini: Fatal error: Uncaught mysqli_sql_exception: Unknown column 'bahasa' in 'field list' in /home/wpcguvfn/public_html/input_nilai_rapot.php:79 Stack trace: #0 /home/wpcguvfn/public_html/input_nilai_rapot.php(79): mysqli_stmt->execute() #1 {main} thrown in /home/wpcguvfn/public_html/input_nilai_rapot.php on line 79

Tidak pernah ada mention soal bahasa. Adanya ya kalau tidak bahasa_indonesia maka bahasa_inggris. Adapun kode semua seperti ini:

<?php

include('structure/check_conn.php');
include('database.php');
global $conn;
global $id_siswa;

// Cek apakah semua field wajib diisi
$requiredFields = ['matematika', 'bahasa_indonesia', 'bahasa_inggris', 'pjok', 'prakarya', 'sejarah', 'ppkn', 'seni_budaya'];
$error = false;
foreach ($requiredFields as $field) {
    if (empty($_POST[$field])) {
        $error = true;
    }
}

if ($error) {
    // Tampilkan pesan error jika ada field yang belum diisi
    echo '<div id="message" class="message success floating-message">Isi data rapot terlebih dahulu.</div>';
    echo '<script>
        setTimeout(function() {
            document.getElementById("message").style.display = "none";
        }, 3000);
    </script>';
} else {
    // Periksa apakah data sudah ada di database
    $checkStmt = $conn->prepare("SELECT id_siswa FROM nilai_rapot_asli WHERE id_siswa = ?");
    $checkStmt->bind_param("i", $_SESSION['id_siswa']);
    $checkStmt->execute();
    $checkStmt->store_result();
    $dataExists = $checkStmt->num_rows > 0;

    if ($dataExists) {
        // Jika data sudah ada, lakukan UPDATE
        $updateStmt = $conn->prepare("UPDATE wpcguvfn_edubridge_db.nilai_rapot_asli SET matematika = ?, fisika = ?, kimia = ?, biologi = ?, ekonomi = ?, geografi = ?, sosiologi = ?, bahasa_indonesia = ?, bahasa_inggris = ?, pjok = ?, prakarya = ?, sejarah = ?, ppkn = ?, seni_budaya = ? WHERE id_siswa = ?");
        $updateStmt->bind_param("iiiiiiiiiiiiiii",
            $_POST['matematika'],
            $_POST['fisika'],
            $_POST['kimia'],
            $_POST['biologi'],
            $_POST['ekonomi'],
            $_POST['geografi'],
            $_POST['sosiologi'],
            $_POST['bahasa_indonesia'],
            $_POST['bahasa_inggris'],
            $_POST['pjok'],
            $_POST['prakarya'],
            $_POST['sejarah'],
            $_POST['ppkn'],
            $_POST['seni_budaya'],
            $_SESSION['id_siswa']
        );
        if ($updateStmt->execute()) {
            header("Location: nilai_rapot.php?isi_nilai_berhasil=true");
            exit;
        } else {
            echo "Error updating data: " . $updateStmt->error;
        }
    } else {
        // Jika data belum ada, lakukan INSERT
        $insertStmt = $conn->prepare("INSERT INTO wpcguvfn_edubridge_db.nilai_rapot_asli (id_siswa, matematika, fisika, kimia, biologi, ekonomi, geografi, sosiologi, bahasa_indonesia, bahasa_inggris, pjok, prakarya, sejarah, ppkn, seni_budaya) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $insertStmt->bind_param("iiiiiiiiiiiiiii",
            $_SESSION['id_siswa'],
            $_POST['matematika'],
            $_POST['fisika'],
            $_POST['kimia'],
            $_POST['biologi'],
            $_POST['ekonomi'],
            $_POST['geografi'],
            $_POST['sosiologi'],
            $_POST['bahasa_indonesia'],
            $_POST['bahasa_inggris'],
            $_POST['pjok'],
            $_POST['prakarya'],
            $_POST['sejarah'],
            $_POST['ppkn'],
            $_POST['seni_budaya']
        );
        if ($insertStmt->execute()) {
            header("Location: nilai_rapot.php?isi_nilai_berhasil=true");
            exit;
        } else {
            echo "Error inserting data: " . $insertStmt->error;
        }
    }
}
?>
Disil commented 1 month ago

Yang menjadi pertanyaan adalah, nilai berhasil masuk ke tabel nilai_rapot_asli. Heran sekali, harusnya kalau ada exception ya stop semua.

Disil commented 1 month ago

ditemukan kode sql yg definisinya double:

ipa     = ubah_rapot_ke_huruf(v_ipa),
                             ips     = ubah_rapot_ke_huruf(v_ips),
                             **bahasa**  = ubah_rapot_ke_huruf(v_bahasa),
                             praktek = ubah_rapot_ke_huruf(v_praktek),
                             politik = ubah_rapot_ke_huruf(v_politik),
                             seni    = ubah_rapot_ke_huruf(v_seni),
                             R       = ubah_riasec_ke_huruf(v_R),
                             I       = ubah_riasec_ke_huruf(v_I),
                             A       = ubah_riasec_ke_huruf(v_A),
                             S       = ubah_riasec_ke_huruf(v_S),
                             E       = ubah_riasec_ke_huruf(v_E),
                             C       = ubah_riasec_ke_huruf(v_C),
                             logika = ubah_minat_ke_huruf(v_logika),
                             sains = ubah_minat_ke_huruf(v_sains),
                             soshum = ubah_minat_ke_huruf(v_soshum),
                             bisnis = ubah_minat_ke_huruf(v_bisnis),
                             kreatif = ubah_minat_ke_huruf(v_kreatif),
                             terapan = ubah_minat_ke_huruf(v_terapan),
                             administratif = ubah_minat_ke_huruf(v_administratif),
                             **bahasa** = ubah_minat_ke_huruf(v_sastra);