About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Penggunaan Cookie untuk Mencegah Submit Ganda pada Polling
PHP

Penggunaan Cookie untuk Mencegah Submit Ganda pada Polling

Baru tadi sore bikin artikel tentang beberapa teknik untuk mencegah submit ganda pada polling, eh… malemnya kok rasanya gatel ingin bikin artikel lanjutannya he..he..he… πŸ™‚

Kali ini saya akan coba ungkap bagaimana cara implementasi teknik pertama dari beberapa teknik yang saya sebutkan, yaitu dengan penggunaan cookie. Untuk penjelasan bagaimana idenya, silakan baca lagi deh artikel sebelumnya.

OK… lanjut… untuk keperluan polling ini, mmm… kita coba menggunakan database ya untuk menyimpan data hasil polling. Sebagai contoh, kita siapkan tabel berikut ini beserta recordnya.

CREATE TABLE polling (
  idoption int(11),
  votes int(11),
  PRIMARY KEY (idoption)
);

INSERT INTO polling VALUES (1, 0);
INSERT INTO polling VALUES (2, 0);
INSERT INTO polling VALUES (3, 0);
INSERT INTO polling VALUES (4, 0);

Next… oya… sebelumnya saya jelaskan terlebih dahulu tentang field dari tabel di atas. Field ‘idoption’ digunakan untuk menyimpan data nomor ID dari pilihan polling. Pada contoh di atas dimisalkan ada 4 option polling yang masing-masing diberi nomor ID: 1, 2, 3, 4. Kalau Anda ingin optionnya ditambah, monggo… πŸ™‚

Trus… field ‘votes’ digunakan untuk menyimpan jumlah votes. Karena proses ini baru dalam tahap membuat (belum ada yang memilih polling), maka jumlah votes ya… dikasih 0 semua. Begitu nanti sudah ada yang memilih, maka perlahan-lahan jumlah votesnya akan bertambah. Apabila ada data polling yang masuk, maka nanti konsepnya adalah ‘update’ data dari record, bukan ‘insert’ data baru. Sebagai contoh misalkan ada orang yang memilih option 1, maka jumlah votes berubah menjadi 1 dari yang tadinya 0. Trus.. bila ada orang yang memilih lagi option 1, maka jumlahnya berubah menjadi 2 dan seterusnya.

OK deh… next, kita buat form untuk pollingnya. Mmm.. enaknya materi polling tentang apa yah? Karena ini baru lapar, pollingnya tentang makanan favorit saja ah.. πŸ™‚

form.htm


<h1>Polling Makanan Favorit Anda</h1>

<p>Apa makanan favorit Anda?</p>

<form method="post" action="submit.php">
<input type="radio" name="option" value="1" /> Bakso <br />
<input type="radio" name="option" value="2" /> Soto <br />
<input type="radio" name="option" value="3" /> Sate <br />
<input type="radio" name="option" value="4" /> Mie Ayam <br /><br />
<input type="submit" name="submit" value="Submit" />
</form>

Perhatikan pada tag untuk memilih option polling di atas, bahwa untuk masing-masing option diberikan value=”1″, “2” dst. Value-value yang berupa angka ini nantinya akan dikaitkan dengan record option yang ada di tabel database yang kita buat sebelumnya. Maksudnya, misalkan ada orang yang memilih ‘bakso’ sebagai makanan favoritnya, maka nantinya jumlah votes yang bertambah dalam tabel adalah data dari option dengan ID 1. Demikian juga untuk option yang lain.

Next… kita buat script submit.php nya sekarang… Nah… di script inilah kita terapkan teknik penggunaan cookienya. Langkah pertama, kita cek dulu keberadaan cookienya dahulu. Jika ada cookie yang tersimpan di browser pemilih polling, maka data tidak akan diproses. Namun bila tidak ada, barulah data akan diproses (disimpan ke database)

Secara garis besar, isi dari script submit.php adalah sebagai berikut

<?php

if (isset($_COOKIE["polling"])) 
{
    echo "Maaf Anda sudah pernah nge-vote";
}
else 
{
    setcookie("polling", "pernah voting", time() + 3600 * 24);
    echo "Terimakasih anda sudah nge-vote";
	/* bagian script untuk simpan data ke database */
}
?>

Statement if (isset($_COOKIE["polling"])) digunakan untuk mengecek keberadaan cookie dengan nama ‘polling’ pada browser client. Di sini diasumsikan nama cookienya ‘polling’. Anda boleh memberi nama cookienya dengan yang lain. It’s up to you :-). Bila sudah ada cookienya dengan nama tersebut (nilai IF bernilai TRUE), maka berarti sebelumnya pernah melakukan voting. Sedangkan bila cookie tidak ada (IF bernilai FALSE), maka kita taruh sebuah cookie dengan nama ‘polling’ menggunakan perintah setcookie().

Trus.. apa itu perintah parameter ‘time() + 3600 * 24‘? apa sih gunanya? ya… itu merupakan parameter yang menunjukkan masa berlaku cookie. Parameter ‘time() + 3600 * 24’ menunjukkan masa berlaku cookienya adalah 24 jam atau 1 hari (dalam satuan detik). Artinya jika telah mencapai waktu 1 hari dihitung sejak cookie tersebut ditaruh di browser, maka cookie otomatis terhapus. dan… artinya si user tadi boleh memilih polling lagi. Wah… kok gitu ya? ya… Anda bisa atur sendirilah masa berlaku cookienya. Bisa 7 hari, 1 bulan, atau bahkan tahunan, tinggal ubah perkaliannya saja. Yang jelas… parameter lama berlaku cookie dihitung dalam satuan detik.

Oya… sedangkan string “pernah voting” itu merupakan value yang disimpan dalam cookie bernama ‘polling’. Value ini bisa Anda isi dengan sebarang string.

Nah… selanjutnya, kita tambahkan baris perintah untuk menyimpan data polling ke database

<?php

if (isset($_COOKIE["polling"])) 
{
    echo "Maaf Anda sudah pernah nge-vote";
}
else 
{
    $pasangCookie = setcookie("polling", "pernah voting", time() + 3600 * 24);
    echo "Terimakasih anda sudah nge-vote";
	
    mysql_connect("localhost", "root", "root");
    mysql_select_db("contoh");
	
    $pilihan = $_POST['option'];
	
    if ($pilihan == 1) $query = "UPDATE polling SET votes = votes + 1 WHERE idoption = 1";
    else if ($pilihan == 2) $query = "UPDATE polling SET votes = votes + 1 WHERE idoption = 2";
    else if ($pilihan == 3) $query = "UPDATE polling SET votes = votes + 1 WHERE idoption = 3";
    else if ($pilihan == 4) $query = "UPDATE polling SET votes = votes + 1 WHERE idoption = 4";
	
    mysql_query($query);
}
?>

Perhatikan query SQL yang digunakan untuk pemrosesan polling. Query tersebut menggunakan UPDATE. Apanya yang diupdate? yang diupdate adalah data pada field ‘votes’. Setiap kali ada vote yang masuk, maka jumlah vote yang lama ditambah 1.

OK… deh, selesai script pollingnya. Trus.. tinggal Anda tambahkan sendiri script untuk melihat hasil polling. Bisa kan? Kalau perlu sajikan dengan representasi grafik yang OK punya, misal pakai bar plot atau pie plot seperti yang tampil di bawah ini.

Photobucket

atau kalau masih bingung caranya menampilkan hasil polling, silakan download script berikut ini πŸ™‚ Hanya syaratnya, PHP anda harus sudah support dengan GD library karena image di atas dibuat menggunakan JpGraph.

Download Seluruh Script

Selamat mencoba… demikian mas Zainal (salah satu member saya) artikelnya. Mudah-mudahan artikel yang Anda request ini bisa bermanfaat bagi Anda dan semua pengunjung setia blog ini.

Bagi yang belum jadi member dan hanya menjadi pengunjung setia blog ini, ayo buruan gabung membernya… supaya Anda bisa request artikel di blog ini he..3x seperti halnya mas Zainal dan yang lain πŸ™‚

 

Bagikan artikel ini jika bermanfaat !

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply