Tutorial Cara Membuat Laporan Nilai Siswa Beserta Nilai Angka dan Keterangan Menggunakan PHP, Library FPDF dan MYSQLi

REPORTPHPFPDFMYSQLi
Banner

Halo Klinik Coders...

Pada artikel ini kita akan mempelajari Tutorial Cara Membuat Laporan Nilai Siswa Beserta Nilai Angka dan Keterangan Menggunakan PHP, Library FPDF dan MYSQLi.

Tahap#1 - Membuat Database dan Tabel

  1. Database sekolah
    CREATE DATABASE IF NOT EXISTS `sekolah` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
  2. Table siswa
    CREATE TABLE `sekolah`.`siswa` 
    ( `id_siswa` INT(11) NOT NULL AUTO_INCREMENT ,
    `nama_siswa` VARCHAR(100) NOT NULL ,
    PRIMARY KEY (`id_siswa`)) ENGINE = InnoDB;
  3. Table mata_pelajaran
    CREATE TABLE `sekolah`.`mata_pelajaran` 
    ( `id_mata_pelajaran` INT(11) NOT NULL AUTO_INCREMENT , 
    `mata_pelajaran` VARCHAR(100) NOT NULL ,
    PRIMARY KEY  (`id_mata_pelajaran`)) ENGINE = InnoDB;
  4. Table nilai
    CREATE TABLE `sekolah`.`nilai` 
    ( `id_nilai` INT(11) NOT NULL AUTO_INCREMENT ,
    `id_mata_pelajaran` INT(11) NOT NULL ,
    `id_siswa` INT(11) NOT NULL ,
    `n_hadir` DECIMAL(3,2) NOT NULL ,
    `n_kuis` DECIMAL(3,2) NOT NULL ,
    `n_tugas` DECIMAL(3,2) NOT NULL ,
    `n_uts` DECIMAL(3,2) NOT NULL ,
    `n_uas` DECIMAL(3,2) NOT NULL ,
    PRIMARY KEY  (`id_nilai`)) ENGINE = InnoDB;

Tahap#2 - Library

Untuk membuat laporan kita membutuhkan Library yaitu :
1. FPDF
2. FAKER

Tahap#3 - Struktur

Setelah Library didownload, buatlah struktur seperti gambar dibawah ini :

 

Tahap#4 - Buat file koneksi.php

Buat lah file koneksi.php dan sesuaikan dengan username dan password server local teman-teman

<?php
$mysqli = new mysqli("localhost", "root", "", "sekolah");

if ($mysqli->connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli->connect_error;
  exit();
}
?>

Tahap#5 - Buat file Laporan.php

Buatlah sebuah file Laporan.php untuk mengkonfigurasi laporan FPDF

<?php
require 'FPDF/fpdf.php';
class Laporan extends FPDF
{
  public $pdf;
  function __construct($orientation = 'L', $unit = 'mm', $size = 'A4')
  {
    parent::__construct($orientation, $unit, $size);
    $this->pdf = $this;
  }


  function Header()
  {
    $this->pdf->Cell(65);
    $this->pdf->SetFont('Arial', 'B', 15);
    $this->pdf->Cell(45, 10, 'Daftar Nilai Siswa', 0, 1, 'C');
    $this->pdf->Cell(80);
    $this->pdf->SetLineWidth(1);


    $this->pdf->Line(5, 15, 204, 15);
    $this->pdf->SetLineWidth(0);
    $this->pdf->Line(5, 16, 204, 16);
    $this->pdf->Ln(1);
  }
}

Tahap#6 - Buat file index.php

Buatlah file index.php untuk mengeksekusi laporan menggunakan FPDF.

<?php
require_once 'koneksi.php';
require_once 'Laporan.php';
require_once 'autoload.php';

$pdf    = new Laporan('P', 'mm', 'a4');
$faker  = Faker\Factory::create();

// Kosongkan table
$mysqli->query("TRUNCATE TABLE siswa");
$mysqli->query("TRUNCATE TABLE mata_pelajaran");
$mysqli->query("TRUNCATE TABLE nilai");

// Data dummy Siswa
for ($i = 1; $i <= 5; $i++) {
  $insert = $mysqli->query("INSERT INTO siswa SET id_siswa = {$i},nama_siswa = '{$faker->name}'");
}

// Data dummy mata pelajaran
$mata_pelajaran = ['Agama', 'Kimia', 'Penjasorkes', 'Bahasa Indonesia', 'Fisika', 'Matematika', 'Bahasa Inggris', 'IPS'];

for ($i = 1; $i < count($mata_pelajaran); $i++) {
  $insert = $mysqli->query("INSERT INTO mata_pelajaran SET id_mata_pelajaran={$i}, mata_pelajaran = '{$mata_pelajaran[$i]}'");
}

// Data dummy nilai
for ($i = 1; $i <= 7; $i++) {
  $nilai = rand(30, 80);
  $insert = $mysqli->query("INSERT INTO nilai SET id_mata_pelajaran = {$i}, id_siswa = 1, n_hadir = " . ($nilai + 2) . ", n_kuis=" . ($nilai + 4) . ",n_tugas=" . ($nilai + 6) . ",n_uts=" . ($nilai + 8) . ",n_uas={$nilai}");
}

$pdf->SetTopMargin(6);
$pdf->SetLeftMargin(20);
$pdf->AddPage();
$pdf->SetTitle('Laporan Nilai Siswa' . date('Y'));
$pdf->SetAuthor('Klinik Code');
$pdf->SetCompression(true);


$pdf->SetFont('Arial', 'B', 'L');
$pdf->SetFontSize(6);
$pdf->Cell(10, 6, "No", 1, 0, 'C');
$pdf->Cell(50, 6, "Mata Pelajaran", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. Hadir", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. Kuis", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. Tugas", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. UTS", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. UAS", 1, 0, 'C', false);
$pdf->Cell(15, 6, "N. ANGKA", 1, 0, 'C', false);
$pdf->Cell(15, 6, "Keterangan", 1, 1, 'C', false);


$sql  = $mysqli->query("SELECT
                          B.mata_pelajaran,
                          A.n_hadir,
                          A.n_kuis,
                          A.n_tugas,
                          A.n_uts,
                          A.n_uas
                        FROM
                          nilai A 
                          LEFT JOIN mata_pelajaran B ON A.id_mata_pelajaran = B.id_mata_pelajaran
                        WHERE
                          A.id_siswa = 1
                      ");
$no = 1;
while ($a = $sql->fetch_array(MYSQLI_ASSOC)) {
  $n_hadir  = 10 / 100 * $a['n_hadir'];
  $n_kuis   = 15 / 100 * $a['n_kuis'];
  $n_tugas  = 20 / 100 * $a['n_tugas'];
  $n_uts    = 25 / 100 * $a['n_uts'];
  $n_uas    = 30 / 100 * $a['n_uas'];
  $n_angka  = $n_hadir + $n_kuis + $n_tugas + $n_uts + $n_uas;

  if ($n_angka >= 60) :
    $ket = "Lulus";
  else :
    $ket = "Tidak Lulus";
  endif;

  $pdf->Cell(10, 6, $no++, 1, 0, 'C');
  $pdf->Cell(50, 6, $a['mata_pelajaran'], 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_hadir, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_kuis, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_tugas, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_uts, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_uas, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $n_angka, 1, 0, 'C', false);
  $pdf->Cell(15, 6, $ket, 1, 1, 'C', false);
}

$pdf->Output('Laporan Nilai', 'I');
?>

Tahap#7 - Eksekusi

Jika tahapan diatas telah dilakukan dengan benar, maka akan tampil seperti gambar dibawah ini :

Sekian tutorial dari saya, mudah-mudahan bermanfaat. Jika ada pertanyaan silahkan isi dibagian kolom komentar.

Let's Coding...

Saya adalah seorang Fullstack Web Developer. Saya sangat menyukai hal-hal baru di dunia teknologi

Traktir Saya
profile
ALFIKRI
Fullstack Web Developer