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
Persiapan Sistem
Software yang Dibutuhkan
Struktur Database
Membuat Halaman Login & Registrasi
Fitur Admin: Tambah & Kelola Kandidat
Fitur Pemilih: Pemungutan Suara
Menampilkan Hasil Voting
Keamanan Sistem
Cara Menjalankan Aplikasi
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)
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)
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)
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
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
$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
<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
$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
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
$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)
<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
Password Hashing (
password_hash()
)Prepared Statements (Anti SQL Injection)
Validasi File Upload (Hanya gambar)
Session Management (Cek login tiap halaman)
HTTPS (Jika online)
7. Cara Menjalankan Aplikasi
Install XAMPP (Apache + MySQL)
Import Database (
evoting.sql
)Letakkan File PHP di
htdocs/evoting
Buat Folder
uploads
(Permission 755)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