Gönderen Konu: Puan Sistemi  (Okunma sayısı 5360 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı OLCAY

  • _ByKuS_
  • Admin
  • *
  • İleti: 8917
  • Rep Gücü : 674
  • Cinsiyet: Bay
  • O şimdi ****EVLİ****
    • Profili Görüntüle
    • boyacı
Puan Sistemi
« : Ekim 01, 2007, 01:39:57 ÖS »

Bu makale'de herhangi bir içeriğimize nasıl oy sistemi yapabileceğimizi yazacağız.İçerik olarak genel dememin sebebi bu herhangi birşey olabilir.
Puan sisteminin mantığında ise;
2 adet alanımız olur ve puan verildiği zaman o içeriğe ait olan Puan veren kişi sayısı 1 arttırılır ve toplam puan adlı alanımıza verilmiş puan eklenir.Bir daha oy vermemesini sağlamak için cookie gönderilir(Tamamen engellenmez).O içeriğe ait olan puan gösterilirken toplam puan, puan veren kişi sayısına bölünür ve böylece puan gösterimi yapılmış olur.İsterseniz IF 'li bir döngü ile yıldız sistemi yapabilirsiniz.
Puan sistemine başlamadan önce içerik tablomuz hazır olsun.Bu içerik tablomuzda 2 adet alan oluşturacağız.

Bu alanlar aşağıdadır.

ToplamPuan(Number)
ToplamKisi(Number)

Bu alanları oluşturup değerleri üstteki gibi ayarladıktan sonra sayfamıza geçelim ve puan vermek için bir form oluşturalım.
BU formu hazırlarken içeriğimizin id numarasını almalıyız.Bu id numarası hangi içeriğe oy verdiğimizi belirleyecek.
Anlatımda id numarasını "id" değişkeninde olduğunu varsayacağım.Bu id numarasını genelde o içeriğe ait detayları gösterirken Querystring ile aldığımız değer olabilir.
Şimdi formu oluşturalım, 1 'den 10 'a kadar puanlarımız olsun.Bu rakamı istediğiniz gibi arttırabilirsiniz.
________________________________________

<form name="frmPuan" method="post" action="PuanVer.asp">
<select name="sPuan" size="1">
<% For i=0 To 10 %><option><%=i%></option><% Next%>
</select>
<input type="hidden" name="id" value="<%=id%>"
</form>
________________________________________

Formumuz yukarıdadır.Bu form "post" yöntemi ile PuanVer.asp adlı oluşturacağımız sayfamıza gönderilecektir.Bu sayfada ise veritabanımızdaki o id ye ait kayıdı seçtirip Puan veren kişi sayısını 1 arttıracağız ve Toplam puan'a verilen puan 'ı ekleyeceğiz.

"PuanVer.asp" adlı sayfamız aşağıdadır.Genel olarak alan ve tablo ismi yazacağım.Kendi bilgilerinizi yazmanız gerekmektedir.
________________________________________

<%
'ObjConn isminde veritabanı bağlantınız buraya..

strSQL = "Select * from Tabloismi Where id = " & Request.Form("id") & ""
Set ObjRS = Server.CreateObject("Adodb.Recordset")
ObjRS.Open strSQL,ObjConn,1,3

ObjRS("ToplamPuan")=ObjRS("ToplamPuan")+Request.Form("sPuan")
ObjRS("ToplamKisi")=ObjRS("ToplamKisi")+1
ObjRS.Update

'İsterseniz bir daha göndermesini engellemek için cookie gönderimini burada yapabilirsiniz.Hemen altta örnek bir kod yazdım.

Response.Cookies("IcerikPuan")(Request.Form("id"))=Request.Form("sPuan")
Response.Cookies("IcerikPuan").Expires = #01/10/2020#
%>
________________________________________


Evet puan kayıt işlemide yapılmış oldu.Örnek olarak bir cookie yolladık, bu cookie'de içeriğin id numarası ve karşılığı olarak göndermiş olduğu puanı yazdık.
Şimdi bu puanı nasıl göstereceğimizi öğreneceğiz.Yazacağım kodlarda ise veritabanınızdan querystring ile aldığım id ye göre içerik seçilecek ve bu içeriğin puan'ı yazdırılacak.
________________________________________

<%
'ObjConn isminde veritabanı bağlantınız buraya..

strSQL = "Select * from Tabloismi Where id = " & Request.Form("id") & ""
Set ObjRS = Server.CreateObject("Adodb.Recordset")
ObjRS.Open strSQL,ObjConn,1,3

If ObjRS("ToplamKisi") <> 0 Then
Response.Write "Puan : " & Round(ObjRS("ToplamPuan") / ObjRS("ToplamKisi"),1)
Else
Response.Write "Bu içeriğe puan verilmemiştir."
End If
%>
________________________________________

İçeriğe ait puanımızı yazdırdık.Yapmamız gerek herşey bukadar.
Önemli Not : Veritabanınıza içeriğinizi eklerken ToplamKisi ve ToplamPuan adlı alanlarınıza "0" değerinin eklendiğinden emin olmalısınız.

Extra olarak cookie'ye göre nasıl form çıkarıp gösterimi yapılacağını görelim.Yukarıda gönderilen cookie değerlerine göre işlem yapacağız.İçeriğimizin "id" numarasına gösterildiği sayfada yapacağız bu işlemi.Veritabanındaki kayıdın numarasını "id" olarak kabul ediyoruz tekrardan.
________________________________________

<%
IcerikIDPuan = Request.Cookies("IcerikPuan")(id)
If IcerikIDPuan <> "" Then
Response.Write "Bu içeriğe " & IcerikIDPuan & " puan vermişsiniz."
Else
%>
'Yukarıdaki puan verme formunu buraya koyabilirsiniz.
<% End If %>
________________________________________


Evet bunuda öğrendiğimize göre sonbirşey kalıyor.Puanlarımızı yıldız olarak göstermek;
Bunu yapmamız zorunlu değildir fakat yapmak isteyenler olabilir.İçeriğimizin puanı kadar for döngüsü yapabiliriz.O kadar yıldız çıkabilir.
Bunun için bize bir adet .gif dosyası gerekiyor.Bunu yıldız olarak kabul edelim ve ismide "Doluyildiz.gif" olsun.Birde kaç puan üzerinden olduğunu belirlemek için "Bosyildiz.gif" adlı bir resim daha hazırlayın.
Aşağıda buna göre bir döngü yapacağız.İçeriğimizin gösterildiği adresde yine veritabanımızdan alanı seçtirelim ve puanımızı yazdıralım
________________________________________

<%
'Veritabanımızdan ObjRS ile yukarıda örneklerdeki gibi id ye göre kayıt seçtirdik.

If ObjRS("ToplamKisi") <> 0 Then
IcerikPuan = Round(ObjRS("ToplamPuan") / ObjRS("ToplamKisi"),0)
For i=1 to 10
If i<IcerikPuan Then
Response.Write "<img src=doluyildiz.gif>"
Else
Response.Write "<img src=bosyildiz.gif>"
End If
Next

Else
Response.Write "Bu içeriğin puanı yoktur."
End If
%>

Evet böylece yıldız sistemimizi de yapmış olduk.Burada bir 1 den 10 a kadar bir döngü başlatıyoruz.Bu döngüde eğer döngünün sırası yani "i" içeriğimizin puanından küçük ise dolu yıldız, değil ise boş yıldız resmi ekrana çıkartıyoruz.Bu resimler yanyana çıkacak ve toplamda 10 adet yanyana yıldız çıkacaktır.