Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Yardım Masası

SORU: Oylama sistemi
Arkadaşlar sitemde makalelere oy verilmesini istiyorum ve şöyle bir şeyler sağdan soldan buldum yaptım bir şeyler. Ama şimdide oylama sisteminde oylama yapıldıktan sonra hangi makaleye oy verdi ise o makaledeki puan butonlarının enable olmasını istiyorum yardımcı olursanız sevinirim şimdiden teşekkür ederim. Burada ne yapabilirim üyelik yok herkes oy kullanabiliyor

protected void Button1_Click(object sender, EventArgs e)
    {  
        SqlConnection conn = new SqlConnection("////");
        SqlCommand cmd = new SqlCommand("UPDATE makale SET HIT=(SELECT HIT FROM makale WHERE ID='"+Request.QueryString["ID"] +"')+1 WHERE ID='"+Request.QueryString["ID"] +"' ", conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
      
     
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection("//");
        SqlCommand cmd = new SqlCommand("UPDATE makale SET HIT=(SELECT HIT FROM makale WHERE ID='" + Request.QueryString["ID"] + "')+0 WHERE ID='" + Request.QueryString["ID"] + "' ", conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
       
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection("//");
        SqlCommand cmd = new SqlCommand("UPDATE makale SET HIT=(SELECT HIT FROM makale WHERE ID='" + Request.QueryString["ID"] + "')-1 WHERE ID='" + Request.QueryString["ID"] + "' ", conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
       
     
    }



Cevaplar

1.  Makaleye oy verildiği zaman butonların disable olmasını istiyorsunuz. Üyelik de yok. O zaman cookie kullanmak durumundasınız. Tabi ziyaretçi cookie'leri temizlerse tekrar oy kullanabilir. Bunu önemsemiyoruz.

Şunları yapmanız gerekiyor:
1. Kodunuzdaki oy verme işlemlerinin hemen ardından mkl25=1 gibi bir cookie set etmelisiniz. (mkl: Makale, 25: makalenin id'si, 1: önemsiz bir değer)
2. Sayfa yüklendiğinde çalışan bir metoda (mesela Page_Load metoduna) "eğer bu makaleyle ilgili cookie set edilmişse butonları disable et" kodu yazmalısınız.

1. kod şöyle bir şey olacak:
string cookieName = "mkl" + Request.QueryString["ID"];
HttpCookie cookie = new HttpCookie(cookieName, 1);
cookie.Expires = DateTime.Now + TimeSpan.FromDays(365); // 1 yıllık
Response.Cookies.Add(cookie);

2. si de böyle birşey:
string cookieName = "mkl" + Request.QueryString["ID"];
if(Request[cookieName]!=null)
   Button1.Enabled = Button2.Enabled = Button3.Enabled = false;


Not:
1. Kodunuzdaki SQL'leri şöyle de yazabilirsiniz:
UPDATE makale SET hit = hit + 1 WHERE id=x;
UPDATE makale SET hit = hit + 0 WHERE id=x; // bunu hiç yazmayın daha iyi :)
UPDATE makale SET hit = hit - 1 WHERE id=x;

2. Şöyle yaparsanız daha da şık olur:
private void oyla(int puan){
        SqlConnection conn = new SqlConnection("////");
        SqlCommand cmd = new SqlCommand("UPDATE makale SET HIT=HIT+("+puan+") WHERE ID='"+Request.QueryString["ID"] +"' ", conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
}
protected void Button1_Click(object sender, EventArgs e)

   oyla(1);
}
protected void Button2_Click(object sender, EventArgs e)

   oyla(0);
}
protected void Button3_Click(object sender, EventArgs e)

   oyla(-1);
}

fizikci
07 Eylül 2007 15:59
2.  Çok Teşekkür ederim hocam ellerinize sağlık..
sanırım gene doğru yapamadım hata verdi
böyle değiştirince çalıştı..

HttpCookie cookie = new HttpCookie(cookieName, Request.QueryString["ID"]);

BaRNeY
07 Eylül 2007 16:39
3.  Eyvallah Barney. Ben "o parametre object tipindedir" diye 1 yazıp geçmiştim. Demek ki string tipindeymiş. Tırnak içinde "1" de yazabilirsin. Hatta öyle yaparsan daha iyi olur, çünkü client tarafında cookie'ler için 4 KB kotan var. Fazla harcamaya gelmez. :)

Bu arada Cobituol.com'a yorum yazdım, kaydederken hata verdi. Galiba AJAX kullanmışsın ama yorumu kaydeden sayfa bir şekilde hataya neden oluyor.

Kolay gelsin..
fizikci
10 Eylül 2007 11:33
4.  Evet Hocam girişlerde sorun yaşıyorum normal metin olarak giriş yapılıyor ama tırnak işareti ve diğer simgeler falan kullanınca hata veriyor onu nasıl halledeceğimide unuttum :(
BaRNeY
10 Eylül 2007 12:18
5.  Parametreli SQL kullanmak çok önemli Barney. Seni hem SQL injection'dan korur, hem de çift tırnak, tek tırnak problemi yaşamazsın. Mesela yukarıdaki SQL kodunu parametreli hale aşağıdaki gibi getirebiliyoruz:

SqlConnection conn = new SqlConnection("//");

SqlCommand cmd = new SqlCommand("UPDATE makale SET HIT=HIT+1 WHERE ID=@ID", conn);
int id = Convert.ToInt32(Request.QueryString["ID"]);
cmd.Parameters.Add("ID", id);

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

SQL'in içinde @ID ifadesi bir parametre. SqlCommand'in Parameters propertisini kullanarak bu parametreyi ve değerini SqlCommand'e ekliyoruz. Bu kadar basit. Dikkat edersen tırnakla falan da hiç uğraşmıyoruz. O ADO.Net'in işi artık.

Muhabbetle..
fizikci
10 Eylül 2007 14:38
6.  Hocam eee zamanında cookie kullanarak hallettik ama ben şimdi geliştirmek istedim ve şöyle bişi yaptım üyelik sistemi ekleyince siteye, dedim böyle yapsam olurmu oldu sizce doğru yapmışmıyım
şöyle yaptım;

makale_puan diye bir tablo oluşturdum ve üye giriş yaptığında puan veren üyenin adını session["username"] diye çekiyor ve uye_name ve makale_id sutunlarına oy verilen makalenin id'si ile yazdırıyorum.

ve veritabanında uye_name ve makale_id mevcutsa butonlar enable oluyor. where sorgusu ile yaptım ama sanki ben bir yerde hata yapıyorum gibi geliyor bana sayfanın bir çok kısmında if kullandım kullanıcı girişlerinden dolayı mesela butonları göstermemek, yorum girişini, oylama butonlarını enable etmek için  if else kullandım bu yanlış bir kullanımı yoksa işin raconu böylemi?
BaRNeY
26 Kasım 2007 17:45
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1078 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen