Sabtu, 31 Mei 2025

Membuat Aplikasi E-Voting Sederhana dengan PHP dan MySQL – Panduan Lengkap + Download Source Code

 

Di era digital ini, sistem pemungutan suara elektronik (E-Voting) semakin populer karena efisiensi dan keamanannya. Aplikasi E-Voting memungkinkan pemilihan dilakukan secara online dengan proses yang lebih cepat, transparan, dan minim kesalahan.

Dalam artikel ini, kita akan membangun aplikasi E-Voting sederhana menggunakan PHP dan MySQL dengan fitur:

 Login multi-role (Admin & Pemilih)
 Pendaftaran kandidat
 Pemungutan suara elektronik
 Statistik hasil voting real-time
 Antarmuka responsif (desktop & mobile)
 Keamanan password hashing

📥 Download Source Code Lengkap di Akhir Artikel!


Daftar Isi

  1. Persiapan Sistem

    • Software yang Dibutuhkan

    • Struktur Database

  2. Membuat Halaman Login & Registrasi

  3. Fitur Admin: Tambah & Kelola Kandidat

  4. Fitur Pemilih: Pemungutan Suara

  5. Menampilkan Hasil Voting

  6. Keamanan Sistem

  7. Cara Menjalankan Aplikasi

  8. Download Source Code Lengkap


1. Persiapan Sistem

Software yang Dibutuhkan

  • XAMPP (PHP 7.4+, MySQL, Apache)

  • Text Editor (VS Code, Sublime Text)

  • Browser (Chrome, Firefox)

Struktur Database

Kita membutuhkan 3 tabel utama:

Tabel users (Penyimpanan data pengguna)

sql

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    role ENUM('admin', 'voter') DEFAULT 'voter',
    has_voted BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tabel candidates (Data kandidat)

sql

CREATE TABLE candidates (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    photo VARCHAR(255),
    description TEXT,
    votes INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tabel votes (Rekam jejak voting)

sql

CREATE TABLE votes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    candidate_id INT NOT NULL,
    voted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (candidate_id) REFERENCES candidates(id)
);

2. Membuat Halaman Login & Registrasi

Login System dengan Password Hash

php

<?php
session_start();
require 'config.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        header('Location: dashboard.php');
        exit;
    } else {
        $error = "Username atau password salah!";
    }
}
?>

Form Registrasi dengan Password Hashing

php

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->execute([$username, $email, $password]);

3. Fitur Admin: Tambah & Kelola Kandidat

Admin dapat:

  • Menambah kandidat baru

  • Upload foto profil

  • Melihat daftar kandidat

  • Menghapus kandidat

Contoh Form Tambah Kandidat

html

<form method="POST" enctype="multipart/form-data">
    <input type="text" name="name" placeholder="Nama Kandidat" required>
    <textarea name="description" placeholder="Deskripsi"></textarea>
    <input type="file" name="photo" accept="image/*">
    <button type="submit" name="add_candidate">Tambah Kandidat</button>
</form>

Proses Upload Foto

php

$uploadDir = 'uploads/';
if (!file_exists($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

$photoName = uniqid() . '.' . pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
move_uploaded_file($_FILES['photo']['tmp_name'], $uploadDir . $photoName);

4. Fitur Pemilih: Pemungutan Suara

Logika Voting

php

if (!$_SESSION['has_voted']) {
    $pdo->beginTransaction();
    
    // Update jumlah suara
    $pdo->prepare("UPDATE candidates SET votes = votes + 1 WHERE id = ?")
        ->execute([$candidate_id]);

    // Catat voting
    $pdo->prepare("INSERT INTO votes (user_id, candidate_id) VALUES (?, ?)")
        ->execute([$_SESSION['user_id'], $candidate_id]);

    // Update status user
    $pdo->prepare("UPDATE users SET has_voted = TRUE WHERE id = ?")
        ->execute([$_SESSION['user_id']]);

    $pdo->commit();
}

5. Menampilkan Hasil Voting

Tampilan Statistik

php

$stmt = $pdo->query("
    SELECT c.name, c.photo, c.votes, 
           ROUND((c.votes / (SELECT SUM(votes) FROM candidates)) * 100, 2) AS percentage
    FROM candidates c
    ORDER BY c.votes DESC
");

Grafik Hasil (Menggunakan Chart.js)

html

<canvas id="resultsChart"></canvas>
<script>
    new Chart(document.getElementById('resultsChart'), {
        type: 'bar',
        data: {
            labels: <?php echo json_encode($candidateNames); ?>,
            datasets: [{
                label: 'Jumlah Suara',
                data: <?php echo json_encode($votes); ?>,
                backgroundColor: '#4a6bff'
            }]
        }
    });
</script>

6. Keamanan Sistem

Proteksi Penting

  1. Password Hashing (password_hash())

  2. Prepared Statements (Anti SQL Injection)

  3. Validasi File Upload (Hanya gambar)

  4. Session Management (Cek login tiap halaman)

  5. HTTPS (Jika online)


7. Cara Menjalankan Aplikasi

  1. Install XAMPP (Apache + MySQL)

  2. Import Database (evoting.sql)

  3. Letakkan File PHP di htdocs/evoting

  4. Buat Folder uploads (Permission 755)

  5. Akses di Browser: http://localhost/evoting


8. Download Source Code Lengkap

📥 Download Aplikasi E-Voting Lengkap
(Termasuk database, semua file PHP, CSS, dan panduan instalasi)

Fitur Download:

  • Full source code siap pakai

  • Dokumentasi lengkap

  • Contoh database SQL

  • Bonus: Skrip backup otomatis


Kesimpulan

Aplikasi E-Voting ini cocok untuk:

  • Pemilihan OSIS

  • Voting internal organisasi

  • Polling online

  • Sistem pemilihan kecil lainnya

Dengan mengikuti panduan ini, Anda sudah membangun sistem voting digital yang aman, efisien, dan mudah dikembangkan.

🚀 Tertarik mengembangkannya lebih lanjut? Coba tambahkan fitur:

  • Verifikasi email

  • Login dengan OTP

  • E-KTP digital

  • Audit trail lengkap

Jangan lupa download source code-nya dan customisasi sesuai kebutuhan!

Tidak ada komentar:

Posting Komentar

Panduan Lengkap Membuat Database, Tabel, Menambah User, dan Memberikan Privilege di Ubuntu Server

Dalam dunia administrasi server, pengelolaan database merupakan salah satu keterampilan fundamental yang harus dikuasai. Ubuntu Server, seba...