Langsung ke konten utama

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!

Komentar

Postingan populer dari blog ini

Cara Install XAMPP di Windows: Pengertian, Kegunaan, dan Langkah-Langkahnya

Daftar Isi Apa Itu XAMPP? Kegunaan XAMPP Persiapan Sebelum Menginstall XAMPP Langkah-Langkah Install XAMPP di Windows Cara Menjalankan XAMPP Menguji XAMPP Berhasil Terinstall Masalah Umum dan Solusi Saat Install XAMPP Kesimpulan Apa Itu XAMPP? XAMPP  adalah sebuah paket perangkat lunak ( software stack ) yang digunakan untuk mengembangkan aplikasi web berbasis PHP, MySQL, dan Apache. XAMPP merupakan singkatan dari: X  (Cross-platform, bisa digunakan di Windows, Linux, dan macOS) A  (Apache – web server) M  (MySQL/MariaDB – database management system) P  (PHP – bahasa pemrograman server-side) P  (Perl – bahasa scripting tambahan) XAMPP dikembangkan oleh  Apache Friends  dan menyediakan lingkungan pengembangan ( local server ) yang memudahkan developer untuk membuat, menguji, dan menjalankan aplikasi web sebelum di- upload  ke server online. Kegunaan XAMPP XAMPP memiliki beberapa fungsi utama, di antaranya: Membuat Server Lokal Memungkinkan pen...

Cara Mengkonversi File Python (.py) ke Executable (.exe) di Linux

  Berikut adalah panduan lengkap untuk mengkonversi script Python ke file .exe yang bisa dijalankan di Windows, meskipun Anda menggunakan Linux sebagai sistem operasi pengembangan. Persyaratan Python 3.x terinstall di Linux Virtual environment (direkomendasikan) Wine (untuk build Windows executable dari Linux) Langkah 1: Persiapan Install Wine (untuk build Windows executable dari Linux) bash Copy Download sudo apt update sudo apt install wine Buat dan aktifkan virtual environment bash Copy Download python3 -m venv myenv source myenv/bin/activate Langkah 2: Install PyInstaller dan Dependencies bash Copy Download pip install pyinstaller pip install PyQt5 mysql-connector-python psutil # atau dependencies proyek Anda Langkah 3: Konversi ke .exe Untuk aplikasi console biasa: bash Copy Download pyinstaller --onefile --clean --name MyApp script_anda.py Untuk aplikasi GUI (seperti PyQt5): bash Copy Download pyinstaller --onefile --windowed --clean --name MyApp script_anda....

Membuat Halaman Login Sederhana untuk Pemula

Halaman login adalah salah satu komponen penting dalam pengembangan website yang membutuhkan autentikasi pengguna. Dalam tutorial ini, kita akan membangun sistem login sederhana menggunakan PHP dan MySQL. Sistem ini akan membedakan akses antara   admin   dan   user biasa , sehingga dapat digunakan sebagai dasar pengembangan aplikasi berbasis role (hak akses). Untuk Files Lengkap ada di Akhir Artikel ini Proyek ini cocok untuk pemula yang ingin memahami: Koneksi database MySQL dengan PHP Proses login dan logout Pembagian hak akses (admin & user) Keamanan dasar dalam autentikasi Kita akan membuat struktur folder dengan file-file berikut: login.php   → Halaman login logout.php   → Proses logout dashboard.php   → Halaman admin user_dashboard.php   → Halaman user biasa config.php   → File koneksi database users.sql   → Struktur tabel untuk menyimpan data login 1. Persiapan Database (users.sql) Sebelum memulai, kita perlu menyiapkan database (...