Php ile Anket Yapalım

Tarih: Temmuz 12th, 2009 | Yazar: | Kategori: Php | Etiketler: , , , , | 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;

anket veritabanı şeması

Ö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…




Benzer Yazılar;

coded by nessus

“Php ile Anket Yapalım” yazısında 5 Ahkam var.

  1. 1 Flooo 12:54 on Temmuz 16th, 2009 anında kesmiş:

    ellerine ve emeğine sağlık.

  2. 2 Värdiga 18:33 on Ağustos 15th, 2009 anında kesmiş:

    bu virgülle 1,2,3,4 şeklinde kaydettiğini radio buton ile alıp foreachle bu şekilde sıralyıp nasıl kaydederiz?

  3. 3 EeTr 21:50 on Ağustos 15th, 2009 anında kesmiş:

    @Värdiga;

    Sorununuzu daha açık yazarsanız yardım edebilirim. Bu haliyle pek doğru anladığımı sanmıyorum..

  4. 4 Gökhan Yiğit 19:16 on Ocak 18th, 2010 anında kesmiş:

    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.

  5. 5 Birdost 14:33 on Nisan 25th, 2012 anında kesmiş:

    Güzel ve performans açısından iyi bir makale olmuş elinize sağlık.


Ahkam Kesme Aparatı

  • *