Php ile Anket Yapalım
Merhaba arkadaşlar. Bugün sizlere en kısa yoldan nasıl bir anket sistemi yapacağımızı göstereceğim. Yeni sistemle beraber veritabanı üzerinden şıklarımızı ve oylarımızı çekeceğiz. Bu sayede çok esnek yapıda bir anketimiz olacaktır. İsteyen kişiler bu sistemi yönetim paneline bağlayıp oradan da istediği gibi anket yaratabilir.
Php’ nin yanında çok az da Css’ den faydalandım. Böylece istenildiği gibi kişiselleştirilebilir birşey ortaya çıktı. İsteyen arkadaşlar fonksiyona bağlayıp; tek bir kod ile gösterebilirler. Dediğim gibi kodlar çok basit ve taşınabilir. Anket konusunda ilk başlarda Google API kullandım yalnız sistemi kasıyordu boşuna. Yine dediğim gibi en iyisi Php ve Css
Öncelikle kodlarımızı verelim;
<?
@$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>
<? } ?>
Kodların uzun olduğu gözünüzü korkutmasın
. Sistemi kasmamak için HTML kısımları Php ye yazdırtmadım. Artık günümüzde herşey hız olmuş durumda
.
Unutmadan veritabanı şeklimiz bu;

Şimdi kodlarımızı açıklayalım;
Öncelikle veritabanımıza bağlanıyoruz. Sonra sorumuzu ve seçeneklerimizi çekiyoruz. Fakat arkadaşlar 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 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…

16 Temmuz 2009 - 12:54
ellerine ve emeğine sağlık.
15 Ağustos 2009 - 18:33
bu virgülle 1,2,3,4 şeklinde kaydettiğini radio buton ile alıp foreachle bu şekilde sıralyıp nasıl kaydederiz?
15 Ağustos 2009 - 21:50
@Värdiga;
Sorununuzu daha açık yazarsanız yardım edebilirim. Bu haliyle pek doğru anladığımı sanmıyorum..
18 Ocak 2010 - 17:16
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.