TUTORIAL

FPDF

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

23-07-2020 23:36:14 BY Alfikri Read 763x 7 min read

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(11NOT NULL AUTO_INCREMENT ,
    `nama_siswa` VARCHAR(100NOT NULL ,
    PRIMARY KEY (`id_siswa`)) ENGINE = InnoDB;
  3. Table mata_pelajaran

    CREATE TABLE `sekolah`.`mata_pelajaran` 
    `id_mata_pelajaran` INT(11NOT NULL AUTO_INCREMENT , 
    `mata_pelajaran` VARCHAR(100NOT NULL ,
    PRIMARY KEY  (`id_mata_pelajaran`)) ENGINE = InnoDB;
  4. Table nilai

    CREATE TABLE `sekolah`.`nilai` 
    `id_nilai` INT(11NOT NULL AUTO_INCREMENT ,
    `id_mata_pelajaran` INT(11NOT NULL ,
    `id_siswa` INT(11NOT NULL ,
    `n_hadir` DECIMAL(3,2NOT NULL ,
    `n_kuis` DECIMAL(3,2NOT NULL ,
    `n_tugas` DECIMAL(3,2NOT NULL ,
    `n_uts` DECIMAL(3,2NOT NULL ,
    `n_uas` DECIMAL(3,2NOT 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


$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

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(4510'Daftar Nilai Siswa'01'C');
    $this->pdf->Cell(80);
    $this->pdf->SetLineWidth(1);

    $this->pdf->Line(51520415);
    $this->pdf->SetLineWidth(0);
    $this->pdf->Line(51620416);
    $this->pdf->Ln(1);
  }
}


Tahap#6 - Buat file index.php

Buatlah file index.php untuk mengeksekusi laporan menggunakan FPDF.

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(3080);
  $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(106"No"10'C');
$pdf->Cell(506"Mata Pelajaran"10'C'false);
$pdf->Cell(156"N. Hadir"10'C'false);
$pdf->Cell(156"N. Kuis"10'C'false);
$pdf->Cell(156"N. Tugas"10'C'false);
$pdf->Cell(156"N. UTS"10'C'false);
$pdf->Cell(156"N. UAS"10'C'false);
$pdf->Cell(156"N. ANGKA"10'C'false);
$pdf->Cell(156"Keterangan"11'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(106$no++, 10'C');
  $pdf->Cell(506$a['mata_pelajaran'], 10'C'false);
  $pdf->Cell(156$n_hadir10'C'false);
  $pdf->Cell(156$n_kuis10'C'false);
  $pdf->Cell(156$n_tugas10'C'false);
  $pdf->Cell(156$n_uts10'C'false);
  $pdf->Cell(156$n_uas10'C'false);
  $pdf->Cell(156$n_angka10'C'false);
  $pdf->Cell(156$ket11'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...


About author

Alfikri

Saya seorang web developer. Saya sangat suka tantangan untuk mempelejari hal-hal baru dalam dunia pemograman.




Leave a Reply

Scroll to Top