Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery][php][mysql] Problem z dodaniem oceny +/-
Forum PHP.pl > Forum > XML, AJAX > AJAX
ojq
Witam :-)

Potrzebuję dodać skrypt do głosowania na konkretny komentarz na zasadzie +/-.

Jako, że wypadałoby to robić bez przeładowania strony to zdecydowałam się skorzystać z gotowego - http://devplugin.pl/aktualnosci/jqueryajax...em-oceny-tresci

Idąc za tym tutorialem posiadam

w index.php, w sekcji HEAD:

  1. <script language="JavaScript" type="text/javascript" src="js/jQuery.js"></script>
  2. <script language="JavaScript" type="text/javascript" src="js/nasze-skrypty.js"></script>



w miejscu, w którym jest kod odpowiedzialny za wyświetlanie komentarzy:

  1. echo'<p class="oceny_kom">
  2. <a href="#" id="gora"><img src="images/kciuk_w_gore.png" width="14" height="14" id="gora" /></a>
  3. <span id="ile"> '.($rowq['ocena']).'</span>
  4. <a href="#" id="dol"><img src="images/kciuk_w_dol.png" width="14" height="14" id="dol" /></a>
  5. </p>';


w pliku nasze-skrypty.js:

  1. $(document).ready(function() {
  2. $("#gora").unbind().bind("click", function() {
  3. $.ajax({
  4. type: '$_SESSION',
  5. url: 'glos.php',
  6. data: 'ocena=dodaj',
  7. success: function(wynik) {
  8. $("#ile").html(wynik)
  9. }
  10. });
  11. return false;
  12. });
  13. $("#dol").unbind().bind("click", function() {
  14. $.ajax({
  15. type: '$_SESSION',
  16. url: 'glos.php',
  17. data: 'ocena=odejmij',
  18. success: function(wynik) {
  19. $("#ile").html(wynik)
  20. }
  21. });
  22. });
  23. return false;
  24. });


w pliku glos.php :

  1. include 'config.php'; //polaczenie z bazą
  2. $increase = "UPDATE komentarze SET ocena=".$rowq['ocena']."+1 WHERE id=".$rowq['id'].";";
  3. $decrease = "UPDATE komentarze SET ocena=".$rowq['ocena']."-1 WHERE id=".$rowq['id'].";";
  4. $active_rate = mysql_query("SELECT * FROM komentarze WHERE id=".$rowq['id'].";");
  5. $how = 0;
  6. if($rt = mysql_fetch_assoc($active_rate)) {
  7. $how = $rt['ocena'];
  8. }
  9. if($_SESSION['ocena'] == 'dodaj') {
  10. mysql_query($increase);
  11. //echo $increase;
  12. echo $how++;
  13. } elseif($_SESSION['ocena'] == 'odejmij') {
  14. mysql_query($decrease);
  15. //echo $decrease;
  16. echo $how--;
  17. }


Na bank gdzieś jest błąd. Tylko nie wiem gdzie.

Po kliknięciu na kciuk w górę - wykonuje akcje, ale nie dodaje głosów i pokazuje liczbę głosów=0. Po kliknięciu w dół - przeładowuje stronę...

Poprawiłam klikanie w "kciuk w dół" return false; było za wysoko. Ale nadal nie mogę znaleźć powodu, dla którego akcja się nie wykonuje...
kaem
Pierwsze co robisz źle to nadajesz elementom <a> i <img> to samo id. Po drugie w jaki sposób identyfikujesz, który komentarz jest oceniany? Nie powinieneś ajaxem jeszcze przeslać jakiegoś dodatkowego parametru? I mam wątpliwości czy coś takiego jest poprawne: type: '$_SESSION'. Tutaj powinno być GET albo POST.
ojq
OK poprawiłam trochę tą część kodu:

  1. echo'<a href="#" id="gora'.$rowq['id'].'"><img src="images/kciuk_w_gore.png" width="14" height="14" id="kciuk_gora" /></a>
  2. <a href="#" id="dol'.$rowq['id'].'"><img src="images/kciuk_w_dol.png" width="14" height="14" id="kciuk_dol" /></a>';
  3. echo'<span id="ile"> '.$rowq['ocena'].'</span>';


glos.php

  1. include 'polacz.php';
  2. $increase = "UPDATE komentarze SET ocena=".$rowq['ocena']."+1 WHERE id=".$rowq['id'].";";
  3. $decrease = "UPDATE komentarze SET ocena=".$rowq['ocena']."-1 WHERE id=".$rowq['id'].";";
  4. $active_rate = mysql_query("SELECT * FROM komentarze WHERE id=".$rowq['id'].";");
  5. $how = 0;
  6. if($rt = mysql_fetch_assoc($active_rate)) {
  7. $how = $rt['ocena'];
  8. }
  9. if($_POST['ocena'] == 'dodaj') {
  10. mysql_query($increase);
  11. //echo $increase;
  12. //$how = $how++;
  13. echo $how;
  14. } else if($_POST['ocena'] == 'odejmij') {
  15. mysql_query($decrease);
  16. //echo $decrease;
  17. //$how = $how--;
  18. echo $how;
  19. }


nasze-skrypty.js:

  1. $(document).ready(function() {
  2. $("#gora").unbind().bind("click", function() {
  3. $.ajax({
  4. type: 'POST',
  5. url: 'glos.php',
  6. data: 'ocena=dodaj',
  7. success: function(wynik) {
  8. $("#ile").html(wynik)
  9. }
  10. });
  11. return false;
  12. });
  13. $("#dol").unbind().bind("click", function() {
  14. $.ajax({
  15. type: 'POST',
  16. url: 'glos.php',
  17. data: 'ocena=odejmij',
  18. success: function(wynik) {
  19. $("#ile").html(wynik)
  20. }
  21. });
  22. return false;
  23. });
  24.  
  25. });


Ale trochę nie do końca wiem, jak to wgryźć w Ajax'a

I nadal po kliknięciu odświeża mi stronę. Kurcze coraz bardziej mi się wydaje, że ten pomysł był zły...

Czy można po prostu dopisać gdzieś, że identyfikacja następuje po $rowq['id'] tak jak jest to dopisane w parametrze id przy a ?
kaem
Ale ty już nie masz id="gora" tylko id="goraID" wiec musisz zrobić
  1. $("a[id=^gora]").click(function(){ czy jakos tak})

czyli binduje zdarzenie onclick do elementów <a> z id zaczynającym się od 'gora'.
Poza tym przesyłasz do skryptu za mało danych. Powinno być data: 'ocena=dodaj&idkomentarza=TUTAJID'. Id komentarza zczytujesz właśnie z id w <a>:
  1. WHERE id=".$_POST['id'].";"

A po za tym w firebugu, albo czymś innym zobacz czy żadanie dochodzi do skryptu, czy dobre parametry przesyłasz, wyświetlaj sobie alerty w różnych częściach skrytpu itd. a łatwiej Ci będzie dojść do błędu.
.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.