Ajax - system ocen - problem

0

Witam, byłem zmuszony do jednego ze swoich projektów napisać system ocen w stylu - dobry lub zły (rączki).

Oczywiście zrobiłem to w Ajaksie, a mianowicie wygląda to tak:

Mam tabelkę rating, a w niej kolumny: rating_user (to kolumna z oficjalnym id usera z tabeli users), who_rate (przechwuje id oceniającego) oraz rate (przechowuje 1 dla "dobry", albo 0 dla "zły"). I teraz tak system działa bardzo dobrze - po kliknięciu na odpowiedni obrazek ("dobry" lub "zły") do tabeli rating dodawany jest nowy rekord. Po kliknięciu kolejny raz na tą samą ocenę rekord jest usuwany (czyli użytkownik może ocenić, a także zabrać ocenę). Jeśli użytkownik wcześniej ocenił na np. "dobry", a teraz kliknie na "zły" to rekord już nie jest usuwany, a tylko wiersz z oceną jest aktualizowany. Chciałbym, aby było tak, że jak użytkownik zmienia swoją ocenę, był widoczny dynamiczny tego rezultat (ovecie jest ale tylko przy kliknięciu na tea samą ocenę (czyli jak daję, albo odbieram ocenę to jest dynamiczny tego widok)). Dla widoku ocen na stronie mam dwa tagi span: tu wyświetla ile dobrych ocen, tu wyświetla ile złych ocen. Tagi mają id, by mogły być wyświetlane dynamiczne wyniki (Ajax) po oddaniu oceny.
Kod JS/Ajax jest napisany następująco:

function rating(user_id, rate)

{

var request = NewObject();
        if (request) {
          request.onreadystatechange = function() {
            if (request.readyState==4) { 
                if (request.status==200) {
                  if(rate == 1) document.getElementById('good').innerHTML=request.responseText;
                  if(rate == 0) document.getElementById('bad').innerHTML=request.responseText;
                } 
             } 
          }          
        };
  
    
        
         request.open('get', '/includes/rating.php?user_id='+user_id+'&rate='+rate, true);
         request.send(null);

}

Pomoże ktos? Jeszcze raz podkreśle, że system działa poprawnie tylko chciałbym by ajax wyświetłał wynik przy zmianie oceny. Czyli jak mam na str.: dobre (3), złe (4) jak głosowałem na "dobre", a kliknę teraz na "złe" to w "dobre" dynamicznie widać jak z np. 3 wypisuje 2, ponieważ zmieniłem swoją ocenę na "dobre", ale już w "złe" nie widzę, że ocena się zmieniła, choć w bazie wszystko poprawnie się zaktualizowało.
Trochę namieszałem, ale może ktoś pomoże.

0

Niepotrzebnie tak namieszałem :D Jednym słowem chodzi o to, by po kliknięciu na ocena, zmiany dynamiczne były widoczne nie tylko w , ale także .

0

musisz skrypt php zmodyfikować do takiej formy, aby zwracał np.

print("$głosyNaTak,$głosyNaNie");

tj. obie informacje w odpowiedzi.
a to patch do twojego javascript'u

if (request.status==200) {
//request.responseText="12312,4322"; //format odpowiedzi
var bad=a.substr(a.indexOf(',')+1);
var good=a.substr(0,a.indexOf(','));
document.getElementById('good').textContent=''+good;//proponuje .textContent, a nie innerHTML, bo jak sam wspomniales tam jest tylko tekst
document.getElementById('bad').textContent=''+bad;
alert("span(...)>("+bad+")>...<("+good+")/span");
}

jeśli chcesz robić to bez modyfikowania zawartości php, czy w czym tam masz backend(?), to chyba w cookies musisz zachować czy uzytkownik juz glosowal na ten wpis :D
edit: nie mialem na mysli sprawdzania, czy uzytkownik juz zaglosowal za pomoca cookies przed dodaniem do bazy, mialem na mysli zachowanie w cookies tego, co wcisnal, ale to nie mialoby zadnego znaczenia przy pracy skryptu php

0

Dzięki, na razie sobie dałem spokój i zmieniłem (uprościłem) trochę system tzn. cofnąłem możliwość odbierania i zmieniania głosu.

to chyba w cookies musisz zachować czy uzytkownik juz glosowal na ten wpis

Nie, nie, sprawdzam waruniem z $MySQL->num_rows() > 0 - jeśli prawda to user nie może już głosować na danego usera. Na cookies by było trochę niebezpiecznie, bo chce dokładne wyniki, a jak user wyczyści cookies, to może znowu ocenić profil, nie nie.

0
Sebek87 napisał(a)

Dzięki, na razie sobie dałem spokój i zmieniłem (uprościłem) trochę system tzn. cofnąłem możliwość odbierania i zmieniania głosu.

to chyba w cookies musisz zachować czy uzytkownik juz glosowal na ten wpis

Nie, nie, sprawdzam waruniem z $MySQL->num_rows() > 0 - jeśli prawda to user nie może już głosować na danego usera. Na cookies by było trochę niebezpiecznie, bo chce dokładne wyniki, a jak user wyczyści cookies, to może znowu ocenić profil, nie nie.

Zawsze można dla uzyskania maksymalnego efektu użyć obu testów jednocześnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1