• 18-03-2017, 03:28:13
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    merhaba arkadaşlar bir konuda acil yardımınıza ihtiyacım var;

    sitemdeki içeriklerime yapılan yorumlara like dislike özelliği eklemek istiyorum ancak bir sorunum var beğen yada beğenme butonlarına tıklandığında oy alma işlemi başarılı oluyor. ancak cevap olarak tüm butonlarda beğendiniz cevabı dönüyor. hallbuki ben sadece beğendiğim yorumda beğendiniz cevabının görünmesini ve beğenme sayısını sayfayı yenilemeden yazdırmasını istiyorum. tabi birde cookie olayı var. aynı yorumu aynı kişi tekrar beğenmesin diye. kodlarım şunlar

         
         <div class="ydetay">Yorum 4</div>
            <a onclick="begenmemeislemi(this.id)" id="4" class="dislike">Beğenmedim (0)</a>
            <a onclick="begenislemi(this.id)" id="4" class="like">Beğendim (6)</a>
    
         <div class="ydetay">Yorum 3</div>
            <a onclick="begenmemeislemi(this.id)" id="3" class="dislike">Beğenmedim (8)</a>
            <a onclick="begenislemi(this.id)" id="3" class="like">Beğendim (133)</a>
    
         <div class="ydetay">Yorum 2</div>
            <a onclick="begenmemeislemi(this.id)" id="2" class="dislike">Beğenmedim (0)</a>
            <a onclick="begenislemi(this.id)" id="2" class="like">Beğendim (70)</a>
    
    function begenislemi(id){
        $('.like').ajaxStart(
        function(){$(this).html('');
        })
        $.ajax({
        type:"POST",
        url:"/Ajax.asp",
        data:'id='+id,
        success:function(ajaxCevap){
    		if (ajaxCevap=="ok")
    			{
    			$('.like').html('Beğendiniz');
    			}
    	   }
        })
    }
    Buda Ajax.asp Sayfası
    yid=request.form("id")
    Baglanti.Execute("Update Yorum Set begen=begen+1 where id="&yid&" and onay=1")
    Response.Write "ok"
  • 18-03-2017, 15:27:09
    #2
    İlk olarak a id leri rakam olmamalı. Daha doğrusu hiçbir class yada id rakamla başlamamalı. id='a1' gibi yapabilirsiniz. Kesinlikle biryerlerde faydasını göreceksiniz.

    İkincis asp sayfasından gönderdiğiniz cevap dizi olarak gelirse istediğiniz işlemi yaparsınız. Asp bilmiyorum ama json olarak gönderirseniz olabilir.
    Yani ajax işleminin dataType ını json, asp den verdiğiniz cevap da ['ok', 'id'] şeklinde yaparsanız, succes fuction (ajaxCevap){
    if (ajaxCevap[0]=="ok")
    {
    var id=ajaxCevap[1];
    $("#"+id).html("Beğendiniz");
    }
    }

    Şeklinde istediğiniz id yi beğendirebilirsiniz.
    Aksi takdirde class ı like olan tüm alanlara etki eder success function.
  • 18-03-2017, 20:31:10
    #3
    mpoy8 adlı üyeden alıntı: mesajı görüntüle
    İlk olarak a id leri rakam olmamalı. Daha doğrusu hiçbir class yada id rakamla başlamamalı. id='a1' gibi yapabilirsiniz. Kesinlikle biryerlerde faydasını göreceksiniz.

    İkincis asp sayfasından gönderdiğiniz cevap dizi olarak gelirse istediğiniz işlemi yaparsınız. Asp bilmiyorum ama json olarak gönderirseniz olabilir.
    Yani ajax işleminin dataType ını json, asp den verdiğiniz cevap da ['ok', 'id'] şeklinde yaparsanız, succes fuction (ajaxCevap){
    if (ajaxCevap[0]=="ok")
    {
    var id=ajaxCevap[1];
    $("#"+id).html("Beğendiniz");
    }
    }

    Şeklinde istediğiniz id yi beğendirebilirsiniz.
    Aksi takdirde class ı like olan tüm alanlara etki eder success function.
    verdiğin bilgiler için teşekkür ederim. sorunu biraz karıştırarak sizin de tavsiyelerinizle hallettim. id="like_1" şeklinde düzenledim id buradan aldım.
    ancak beğendiniz yada beğenmediniz sonucunun yanına son beğenme ya da beğenmeme rakamlarınıza yazdırmak istiyorum sayfayı yenilemeden bunu nasıl yapacağım bir türlü çözemedim
  • 19-03-2017, 00:57:06
    #4
    bunun için de şöyle yapacaksınız, mesela bir beğeni geldi, bu işlemde ajax isteği yaptığınız ajax.asp sayfasına beğenilen içeriğin id si de gönderiliyor ya, o asp sayfasında bir veritabanı işlemi ile o id nin kaç kere beğenildiğini çekeceksiniz. Tabi veritabanında bunu tutuyorsanız yapabilirsiniz. Tutmuyorsanız veritabanında beğeni sayıları diye tablo açıp her id ye bir satır ayırmanız gerekir, her beğeni geldiğinde bu sayıyı bir arttırmanız gerekir. Bu işlem yapıldıktan sonra bu sayıyı çekip, geri gönderdiğiniz JSON içeriğine bu sayıyı da ilave etmeniz yeterlidir. ["ok", "like_5", 54]
    gibi bir cevap verirseniz success function'da ajaxData[0] == ok ise ajaxData[1] id si olan alanın beğeni sayısını ajaxData[2] olarak değiştir diyerek bu işi çözmüş olursunuz.
  • 19-03-2017, 15:31:50
    #5
    sistem şuanda çalışıyor son halini aşağıdaki kodlamalardan inceleyebilirsiniz. ancak hala bir sorunumuz var. Cookie ile aynı kişinin aynı yoruma birden fazla oy vermesini de engellemek istiyorum. şuanda sürekli oy verilebiliyor.

    HTML Sayfa Kodları:
         <div class="ydetay">Yorum 2</div>
            <a onclick="dislike(this.id)" id="dislike_2" class="dislike">Beğenme (2)</a>
            <a onclick="like(this.id)" id="like_2" class="like">Beğen (76)</a>
    
         <div class="ydetay">Yorum 1</div>
            <a onclick="dislike(this.id)" id="dislike_1" class="dislike">Beğenme (6)</a>
            <a onclick="like(this.id)" id="like_1" class="like">Beğen (72)</a>
    Ajax.Asp sayfası:
    gid=request.form("id")
    bol=split(gid,"_")
    id=inject(bol(1))
    
    if request.form("istek")="like" then
    Baglanti.Execute("Update Yorum Set begen=begen+1 where id="&id&" and onay=1")
    Set begenme = baglanti.execute("select * from Yorum where id="&id&" and onay=1")
    bsayisi = begenme("begen")
    Response.Write "Beğendiniz ("&bsayisi&")"
    end if
    Ajax.js sayfası
    function like(id){
        $('.like').ajaxStart(
        function(){$(this).html('');
        })
        $.ajax({
        type:"POST",
        url:"/Ajax.asp",
        data:'istek=like'+'&'+'id='+id,
        success:function(ajaxCevap){
    			$('#'+id).html(''+ajaxCevap+'');
    	   }
        })
    }
  • 19-03-2017, 16:38:14
    #6
    ip engeli yapsanız da gıcık biri sürekli oy verebilir.
    Sürekli oy vermenin çok sakıncası yok bence
  • 20-03-2017, 00:15:40
    #7
    Altuncu adlı üyeden alıntı: mesajı görüntüle
    sistem şuanda çalışıyor son halini aşağıdaki kodlamalardan inceleyebilirsiniz. ancak hala bir sorunumuz var. Cookie ile aynı kişinin aynı yoruma birden fazla oy vermesini de engellemek istiyorum. şuanda sürekli oy verilebiliyor.
    html local storage özelliği ile tarayıcıya veri yerleştirip bunu yapabilirsiniz, ama başka tarayıcıdan girip yine beğenebilir, tarayıcıda tüm geçmişi temizle diyerek cookie ve local storage bilgilerini de silerek defalarca yine beğenebilir,

    Eğer gerçekten birden fazla beğenme yapılmasını istemiyorsanız birkaç yöntemi birden kullanmanız gerekir.

    Ip banlama, local storage, cookie ve session kullanarak 4 yerden engellersiniz ama çözüm değil, üyelik yoksa bir şekilde yine beğenir

    sadece zorlaştırabilirsiniz.

    // Local storage ye veri ekleme;
    localStorage.setItem("like_15", "1");
    
    // like_15 id si olan yorumun beğenmesini 1 olarak ayarladık yani beğenildi.
    
    // veriyi çekme
    localStorage.getItem("like_15");
    
    // id si like_15 olan yorumun beğenmesini çektik, yoksa yada sıfır ise //beğenebilir eğer 1 ise beğenemez.
    şeklinde local storage kullanabilirsiniz. Siz silmediğiniz ve kullanıcı tarayıcıyı sıfırlamadığı sürece sonsuza kadar bu veri orada kalır. Süresi yoktur.