Script Web Polling / Survey Sederhana dengan PHP dan MySQL

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 questionsoptions, dan votes. Berikut adalah struktur dan contoh data dari tabel-tabel tersebut:

  • Tabel questions berisi data pertanyaan polling atau survey. Tabel ini memiliki kolom id sebagai primary key, question sebagai teks pertanyaan, dan type 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 kolom id sebagai primary key, question_id sebagai foreign key yang menghubungkan dengan tabel questions, dan option 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 kolom id sebagai primary key, option_id sebagai foreign key yang menghubungkan dengan tabel options, dan ip 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_querymysqli_fetch_assocmysqli_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.

Leave a Reply