Polling atau survey online adalah salah satu cara untuk mengetahui pendapat atau preferensi pengunjung website Anda. Dengan membuat polling atau survey online, Anda dapat mengumpulkan data dan feedback yang berguna untuk meningkatkan kualitas website Anda. Selain itu, polling atau survey online juga dapat meningkatkan interaksi dan keterlibatan pengunjung website Anda.
Untuk membuat polling atau survey online, Anda dapat menggunakan berbagai layanan yang tersedia di internet, seperti Google Forms, SurveyMonkey, Typeform, dll. Namun, jika Anda ingin membuat polling atau survey online sendiri, Anda dapat menggunakan script PHP dan MySQL sebagai bahasa pemrograman dan database yang populer dan mudah digunakan.
Dalam artikel ini, saya akan menjelaskan cara membuat script web polling / survey sederhana dengan PHP dan MySQL. Script ini akan memungkinkan Anda untuk membuat pertanyaan polling atau survey dengan pilihan jawaban tunggal atau ganda, menampilkan hasil polling atau survey dalam bentuk grafik, dan mencegah pengguna yang sama untuk memberikan suara lebih dari sekali.
Langkah-langkah Membuat Script Web Polling / Survey Sederhana
Berikut adalah langkah-langkah yang perlu Anda lakukan untuk membuat script web polling / survey sederhana dengan PHP dan MySQL:
1. Membuat Database dan Tabel
Langkah pertama yang perlu Anda lakukan adalah membuat database dan tabel yang akan digunakan untuk menyimpan data polling atau survey Anda. Anda dapat menggunakan phpMyAdmin atau aplikasi lain yang dapat mengelola database MySQL.
Untuk tutorial ini, saya akan membuat database dengan nama polling
dan tabel dengan nama questions
, options
, dan votes
. Berikut adalah struktur dan contoh data dari tabel-tabel tersebut:
- Tabel
questions
berisi data pertanyaan polling atau survey. Tabel ini memiliki kolomid
sebagai primary key,question
sebagai teks pertanyaan, dantype
sebagai tipe pertanyaan (single atau multiple).
id | question | type |
---|---|---|
1 | Apa warna favorit Anda? | single |
2 | Apa hobi Anda? | multipl |
- Tabel
options
berisi data pilihan jawaban untuk setiap pertanyaan. Tabel ini memiliki kolomid
sebagai primary key,question_id
sebagai foreign key yang menghubungkan dengan tabelquestions
, danoption
sebagai teks pilihan jawaban.
id | question_id | option |
---|---|---|
1 | 1 | Merah |
2 | 1 | Biru |
3 | 1 | Hijau |
4 | 1 | Kuning |
5 | 2 | Membaca |
6 | 2 | Menulis |
7 | 2 | Bermain game |
8 | 2 | Olahraga |
- Tabel
votes
berisi data suara yang diberikan oleh pengguna untuk setiap pilihan jawaban. Tabel ini memiliki kolomid
sebagai primary key,option_id
sebagai foreign key yang menghubungkan dengan tabeloptions
, danip
sebagai alamat IP pengguna yang memberikan suara.
id | option_id | ip |
---|---|---|
1 | 1 | 192.168.0.1 |
2 | 2 | 192.168.0.2 |
3 | 5 | 192.168.0.1 |
4 | 6 | 192.168.0.2 |
5 | 7 | 192.168.0.3 |
6 | 8 | 192.168.0.4 |
2. Membuat Koneksi ke Database
Langkah kedua yang perlu Anda lakukan adalah membuat koneksi ke database yang telah Anda buat sebelumnya. Anda dapat menggunakan fungsi mysqli_connect
yang disediakan oleh PHP untuk membuat koneksi ke database MySQL.
Berikut adalah contoh kode PHP untuk membuat koneksi ke database polling
:
<?php // Menyimpan data koneksi ke variabel $host = "localhost"; // Nama host atau alamat IP server $user = "root"; // Nama user untuk login ke database $pass = ""; // Password untuk login ke database $db = "polling"; // Nama database yang akan digunakan // Membuat koneksi ke database $conn = mysqli_connect($host, $user, $pass, $db); // Mengecek apakah koneksi berhasil atau tidak if (!$conn) { // Jika koneksi gagal, menampilkan pesan error die("Koneksi gagal: " . mysqli_connect_error()); } ?>
Anda dapat menyimpan kode ini dalam file dengan nama db.php
dan menggunakannya di file-file lain dengan menggunakan fungsi include
atau require
.
3. Membuat Halaman untuk Menampilkan Pertanyaan dan Pilihan Jawaban
Langkah ketiga yang perlu Anda lakukan adalah membuat halaman untuk menampilkan pertanyaan dan pilihan jawaban yang ada di database. Anda dapat menggunakan fungsi mysqli_query
dan mysqli_fetch_assoc
untuk mengambil data dari database dan menampilkannya dalam bentuk HTML.
Berikut adalah contoh kode PHP dan HTML untuk membuat halaman untuk menampilkan pertanyaan dan pilihan jawaban:
<?php // Menghubungkan file db.php untuk koneksi ke database include "db.php"; // Menyimpan id pertanyaan yang dikirim melalui URL ke variabel $id = $_GET['id']; // Membuat query untuk mengambil data pertanyaan berdasarkan id $query = "SELECT * FROM questions WHERE id = $id"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) > 0) { // Jika ada, mengambil data pertanyaan dan menyimpannya ke variabel $row = mysqli_fetch_assoc($result); $question = $row['question']; $type = $row['type']; } else { // Jika tidak ada, menampilkan pesan error die("Pertanyaan tidak ditemukan"); } // Membuat query untuk mengambil data pilihan jawaban berdasarkan id pertanyaan $query = "SELECT * FROM options WHERE question_id = $id"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) > 0) { // Jika ada, membuat array untuk menyimpan data pilihan jawaban $options = array(); // Mengulangi setiap baris hasil query dan menambahkannya ke array while ($row = mysqli_fetch_assoc($result)) { $options[] = $row; } } else { // Jika tidak ada, menampilkan pesan error die("Pilihan jawaban tidak ditemukan"); } ?> <!DOCTYPE html> <html> <head> <title>Polling / Survey Online</title> </head> <body> <h1>Polling / Survey Online</h1> <form action="vote.php" method="post"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <p><?php echo $question; ?></p> <?php // Mengulangi setiap elemen array options dan menampilkannya dalam bentuk input radio atau checkbox foreach ($options as $option) { // Menyimpan data id dan teks pilihan jawaban ke variabel $option_id = $option['id']; $option_text = $option['option']; // Mengecek tipe pertanyaan dan menentukan tipe input yang sesuai if ($type == "single") { // Jika tipe pertanyaan adalah single, menggunakan input radio echo "<input type='radio' name='option' value='$option_id'> $option_text <br>"; } else { // Jika tipe pertanyaan adalah multiple, menggunakan input checkbox echo "<input type='checkbox' name='option[]' value='$option_id'> $option_text <br>"; } } ?> <input type="submit" name="submit" value="Submit"> </form> </body> </html>
Anda dapat menyimpan kode ini dalam file dengan nama poll.php
dan mengaksesnya dengan menggunakan URL seperti http://localhost/poll.php?id=1
untuk menampilkan pertanyaan dan pilihan jawaban berdasarkan id yang dikirim.
4. Membuat Halaman untuk Memproses Suara dan Menampilkan Hasil
Langkah keempat yang perlu Anda lakukan adalah membuat halaman untuk memproses suara yang diberikan oleh pengguna dan menampilkan hasil polling atau survey dalam bentuk grafik. Anda dapat menggunakan fungsi mysqli_query
, mysqli_fetch_assoc
, mysqli_num_rows
, dan mysqli_affected_rows
untuk mengolah data dari database dan menampilkan jumlah suara untuk setiap pilihan jawaban. Anda juga dapat menggunakan library Google Charts
untuk membuat grafik yang menarik dan interaktif.
Berikut adalah contoh kode PHP dan HTML untuk membuat halaman untuk memproses suara dan menampilkan hasil:
<?php // Menghubungkan file db.php untuk koneksi ke database include "db.php"; // Mengecek apakah form telah disubmit atau tidak if (isset($_POST['submit'])) { // Jika ya, menyimpan data id pertanyaan dan pilihan jawaban yang dikirim melalui form ke variabel $id = $_POST['id']; $option = $_POST['option']; // Mengecek apakah pilihan jawaban adalah array atau tidak if (is_array($option)) { // Jika ya, berarti tipe pertanyaan adalah multiple // Mengulangi setiap elemen array option dan memprosesnya foreach ($option as $opt) { // Menyimpan data id pilihan jawaban dan alamat IP pengguna ke variabel $option_id = $opt; $ip = $_SERVER['REMOTE_ADDR']; // Membuat query untuk mengecek apakah pengguna sudah memberikan suara untuk pilihan jawaban ini atau tidak $query = "SELECT * FROM votes WHERE option_id = $option_id AND ip = '$ip'"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) == 0) { // Jika tidak ada, berarti pengguna belum memberikan suara untuk pilihan jawaban ini // Membuat query untuk menambahkan data suara ke tabel votes $query = "INSERT INTO votes (option_id, ip) VALUES ($option_id, '$ip')"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah query berhasil atau tidak if (!$result) { // Jika gagal, menampilkan pesan error die("Query gagal: " . mysqli_error($conn)); } } } } else { // Jika tidak, berarti tipe pertanyaan adalah single // Menyimpan data id pilihan jawaban dan alamat IP pengguna ke variabel $option_id = $option; $ip = $_SERVER['REMOTE_ADDR']; // Membuat query untuk mengecek apakah pengguna sudah memberikan suara untuk pertanyaan ini atau tidak $query = "SELECT * FROM votes WHERE option_id IN (SELECT id FROM options WHERE question_id = $id) AND ip = '$ip'"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) == 0) { // Jika tidak ada, berarti pengguna belum memberikan suara untuk pertanyaan ini // Membuat query untuk menambahkan data suara ke tabel votes $query = "INSERT INTO votes (option_id, ip) VALUES ($option_id, '$ip')"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah query berhasil atau tidak if (!$result) { // Jika gagal, menampilkan pesan error die("Query gagal: " . mysqli_error($conn)); } } } } // Menyimpan id pertanyaan yang dikirim melalui URL atau form ke variabel $id = $_GET['id'] ?? $_POST['id']; // Membuat query untuk mengambil data pertanyaan berdasarkan id $query = "SELECT * FROM questions WHERE id = $id"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) > 0) { // Jika ada, mengambil data pertanyaan dan menyimpannya ke variabel $row = mysqli_fetch_assoc($result); $question = $row['question']; $type = $row['type']; } else { // Jika tidak ada, menampilkan pesan error die("Pertanyaan tidak ditemukan"); } // Membuat query untuk mengambil data pilihan jawaban dan jumlah suara berdasarkan id pertanyaan $query = "SELECT o.id, o.option, COUNT(v.id) AS votes FROM options o LEFT JOIN votes v ON o.id = v.option_id WHERE o.question_id = $id GROUP BY o.id"; // Menjalankan query dan menyimpan hasilnya ke variabel $result = mysqli_query($conn, $query); // Mengecek apakah hasil query ada atau tidak if (mysqli_num_rows($result) > 0) { // Jika ada, membuat array untuk menyimpan data pilihan jawaban dan jumlah suara $options = array(); // Mengulangi setiap baris hasil query dan menambahkannya ke array while ($row = mysqli_fetch_assoc($result)) { $options[] = $row; } } else { // Jika tidak ada, menampilkan pesan error die("Pilihan jawaban tidak ditemukan"); } ?> <!DOCTYPE html> <html> <head> <title>Polling / Survey Online</title> <!-- Menyisipkan library Google Charts --> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> // Memuat paket corechart dari Google Charts google.charts.load('current', {'packages':['corechart']}); // Membuat fungsi untuk menggambar grafik google.charts.setOnLoadCallback(drawChart); // Mendefinisikan fungsi untuk menggambar grafik function drawChart() { // Membuat data tabel untuk grafik var data = new google.visualization.DataTable(); // Menambahkan kolom untuk teks pilihan jawaban dan jumlah suara data.addColumn('string', 'Option'); data.addColumn('number', 'Votes'); // Menambahkan baris untuk setiap pilihan jawaban dan jumlah suara data.addRows([ <?php // Mengulangi setiap elemen array options dan menambahkannya ke data tabel foreach ($options as $option) { // Menyimpan data teks pilihan jawaban dan jumlah suara ke variabel $option_text = $option['option']; $option_votes = $option['votes']; // Menampilkan data dalam format yang sesuai untuk data tabel echo "['$option_text', $option_votes],"; } ?> ]); // Membuat opsi untuk grafik var options = { // Menentukan judul grafik title: '<?php echo $question; ?>', // Menentukan lebar dan tinggi grafik width: 600, height: 400 }; // Membuat objek grafik berdasarkan tipe pertanyaan if ('<?php echo $type; ?>' == 'single') { // Jika tipe pertanyaan adalah single, menggunakan grafik pie var chart = new google.visualization.PieChart(document.getElementById('chart_div')); } else { // Jika tipe pertanyaan adalah multiple, menggunakan grafik bar var chart = new google.visualization.BarChart(document.getElementById('chart_div')); } // Menggambar grafik dengan data dan opsi yang telah ditentukan chart.draw(data, options); } </script> </head> <body> <h1>Polling / Survey Online</h1> <p>Terima kasih telah berpartisipasi dalam polling atau survey online ini. Berikut adalah hasil polling atau survey yang Anda ikuti:</p> <!-- Menampilkan grafik dalam elemen div dengan id chart_div --> <div id="chart_div"></div> </body> </html>
Anda dapat menyimpan kode ini dalam file dengan nama vote.php
dan mengaksesnya dengan menggunakan URL seperti http://localhost/vote.php?id=1
untuk menampilkan hasil polling atau survey berdasarkan id yang dikirim.
Kesimpulan
Dengan mengikuti langkah-langkah di atas, Anda telah berhasil membuat script web polling / survey sederhana dengan PHP dan MySQL. Script ini dapat Anda modifikasi dan kembangkan sesuai dengan kebutuhan dan kreativitas.