Php ile Anket Yapalım
Tarih: Temmuz 12th, 2009 | Yazar: Ertuğrul Erkan | Kategori: Php | Etiketler: anket, php dersler, php ile anket yapımı, php ile oylama, php ile veritabanı anket | 5 Yorum »Web 2.0 ile kullanıcının aktif katılımını, içeriğe müdahale gücünü görmezden gelemez hale geldik. Bu sebeptendir ki anketler, yönetici ve katılımcı arasında ki ortantılı bir iletişim kuruyor. Her sisteme adapte olabilmesi için kodlarımız oldukça optimize şekilde tabi ki.
Php’ nin yanında çok az da Css’ den faydalanıcaz. Böylece istenildiği gibi kişiselleştirilebilir birşey ortaya çıkacak. İsteseniz fonksiyona bağlayıp; tek bir kod ile gösterebilirsiniz. Kodlar çok basit ve taşınabilir. İsterseniz Google API kullanabilirsiniz yalnız testlerimizde performans kaybına yol açtığını gördük.
<?
@$baglan = mysql_connect("localhost","root","");
@mysql_select_db("anket",$baglan);
$sorgu = mysql_query("SELECT * FROM anket") or die ("hata");
$soru = @mysql_result($sorgu, 0, "soru");
$sec = @mysql_result($sorgu, 0, "sec");
$secs = explode(",",$sec);
if($_POST) {
$veri = @mysql_result($sorgu, 0, "oy");
$id = @mysql_result($sorgu, 0, "id");
$hangi = $_POST["veri"];
$oy = explode(",",$veri);
$yeni = $oy[$hangi]+1;
$oy[$hangi] = $yeni;
foreach($oy as $tek) $toplam += $tek;
$sql = "UPDATE anket SET oy='";
foreach($oy as $tek) {
if($s_sql!="") $s_sql.=",";
$s_sql.=$tek;
$sonuclar[] = number_format(($tek/$toplam*100));
}
$i = -1;
echo "<div id='u_bas'>$soru</div>";
foreach($sonuclar as $sonuc) {
$i += 1;
?>
<div style="width:<? echo $sonuc ?>%; background-color:#ddd"><? echo $secs[$i]; ?></div>
<?
}
$sql .= $s_sql."' WHERE id='$id'";
$sorgu = mysql_query($sql) or die ("no");
?>
<? }else{ echo $soru; ?>
<form id="form1" name="form1" method="post" action="">
<? $i=-1; foreach($secs as $sect) { $i +=1;?>
<p>
<input type="radio" name="veri" value="<? echo $i; ?>"/><? echo $sect; ?>
</p>
<? } ?>
<input type="submit" name="button" id="button" value="Oyla">
</form>
<? } ?>
Veritabanı şeklimiz bu;

Öncelikle veritabanımıza bağlanıyoruz. Sonra sorumuzu ve seçeneklerimizi çekiyoruz. Fakat seçenekler tek bir şekilde kayıt ediliyor; sec1,sec2 . Bu da sanki bir tek bir seçenek gibi gösteriyor. Bizde explode komutu ile “,” noktalarından hepsini ayırıyoruz ve secs isimli bir diziye atıyoruz.
Sonra sayfaya veri yollanmış mı kontrol ediliyor. Eğer ki veri yollanmış ise toplam oy sayısı alınıyor ki bu da yukarıda belirttiğim gibi 11,12,123 şeklinde ve Php tek bir veri kabul ediyor. Bunları da “,” noktalarından ayırıyoruz. Sonra kullanıcı hangi şıkkı seçmiş onu alıyoruz ve gerekli oy kısmına artı bir düşürüyoruz.
Kısa ise mantık şu şekilde; Form1=>0; Form2=1 — Oy1=>11; Oy2=>12 burada kontrol ediliyor ve $oy[hangi sıradaki veri] diyoruz. Sonrasında sırada ki veriye +1 ekleniyor. Böylece oy verilmiş oluyor. Sonrasında ise dizimizi güncelliyoruz.
Hemen ardından parçalanmış olan oy sırasını (12,13 diye almıştık sonra 12 13 diye ayırdık. Eklerken tekrar birleştiriyoruz ) tekrar kuruyoruz ardından bunu veritabanımıza ekliyoruz. Ondan önce her oy’un toplam yüzde değeri alınıyor ve $sonuclar isimli bir diziye aktarılıyor. İşte burada Css gücü ile kutucuklarımızı yaratıyoruz…
Eğer ki if false düşerse bu seferde seçeneklerimiz veritabanından alınıyor ve radio grup içerisine tek tek ekleniyor…
Gördüğünüz gibi oylarımızın bulunduğu kutucuklarımıza style ifadesinden faydalanarak yüzdeler veriyoruz. Sonunda 10 üzerinden ayarlamalar yapılıyor. Kodları denerseniz daha iyi anlaşılır hale gelecektir…
Sorularınızı buradan sorabilirsiniz. İyi günler, iyi çalışmalar…

ellerine ve emeğine sağlık.
bu virgülle 1,2,3,4 şeklinde kaydettiğini radio buton ile alıp foreachle bu şekilde sıralyıp nasıl kaydederiz?
@Värdiga;
Sorununuzu daha açık yazarsanız yardım edebilirim. Bu haliyle pek doğru anladığımı sanmıyorum..
Merhabalar önce dersiniz için teşekkürler işime yaradı fakat her kullanıcı tek bir defa oy kullansa daha kaliteli bir birşey olucağını dusunuyorum belki biraz yardımla çözebiliriz yanıtınızı bekliyorum.
Güzel ve performans açısından iyi bir makale olmuş elinize sağlık.