Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie do bazy, bez przeładowania strony
Cromwell
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

Ostrzeżenie: (0%)
-----


Piszę prosty system głosowania.
Wszystko idzie dobrze, tylko jedna rzecz mnie męczy.

Głosowanie wygląda podobnie jak na demotywatory.pl
Są dwa linki, plus i minus, które zmieniają wartość w bazie danych.
O ile zrobić to z przeładowaniem strony nie jest trudne, to chciałbym, aby działało to tak, jak na demotywatorach, bez przeładowania.

A że w JS jestem bardzo słaby, to sam sobie nie poradzę.
Z tego co widzę, na demotywatorach jest użyty jQuery.

Czyli mówiąc prościej - jak zrobić, aby po kliknięciu na link, wysyłało się zapytanie do bazy danych, bez przeładowania strony?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




słowo klucz: AJAX
Z racji, że piszesz w dziale AJAX rozumiem że słowo klucz już znasz. Teraz czas najwyższy poczytać trochę o nim, a następnie gdy będziesz miał konkretny problem z kodem - wróć do nas.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Cromwell
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

Ostrzeżenie: (0%)
-----


Ok.
Poszukałem, popróbowałem i teraz mam coś takiego:

W head:
  1. <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  2. <script type="text/javascript">
  3. function plus(id){
  4. $("#plus").load("vote.php?jak=plus&id="+id);
  5. }
  6. function minus(id){
  7. $("#plus").load("vote.php?jak=minus&id="+id);
  8. }


wywołuję to przy pomocy:

  1. echo '<a href="java script:plus('."'".$row['id']."'".')">plus</a>';
  2. echo ' <b id="plus">'.$row['ocena'].'</b> ';
  3. echo '<a href="java script:minus('."'".$row['id']."'".')">minus</a>';

Oczywiście ten fragment jest w pętli i jest wiele takich elementów.

Jeśli zaś chodzi o kod pliku vote.php, wygląda on tak:

  1. include 'config.php'; // łączenie z bazą danych
  2.  
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4. $id = $_GET['id'];
  5.  
  6. $ip_sql=mysql_query("SELECT ip FROM adresy WHERE plik='$id' and ip='$ip'");
  7. $count=mysql_num_rows($ip_sql);
  8.  
  9.  
  10. if ($count == 0)
  11. {
  12. if ($_GET['jak'] == 'plus')
  13. {
  14. mysql_query("UPDATE tekst SET ocena=ocena+1 WHERE id = '$id'");
  15. mysql_query("INSERT INTO adresy VALUES('', '$id', '$ip')");
  16. $query = mysql_query("SELECT ocena FROM tekst WHERE id = '$id'");
  17. $row = mysql_fetch_row($query);
  18. echo $row[0];
  19. }
  20. if ($_GET['jak'] == 'minus')
  21. {
  22. mysql_query("UPDATE tekst SET ocena=ocena-1 WHERE id = '$id'");
  23. mysql_query("INSERT INTO adresy VALUES('', '$id', '$ip')");
  24. $query = mysql_query("SELECT ocena FROM tekst WHERE id = '$id'");
  25. $row = mysql_fetch_row($query);
  26. echo $row[0];
  27. }
  28. }
  29. else
  30. {
  31. echo 'już oddałeś głos!';
  32. }


Całość działa świetnie, ale tylko wtedy, gdy jest tylko jeden rekord w pętli. Jeśli jest kilka, to działa tylko pierwszy.
To znaczy, przy reszcie zmieniają się wartości, ale dopiero po przeładowaniu to widać, natomiast przy pierwszym wywala informację 'już oddałeś głos'.

Może mi ktoś z tym pomóc?

Ten post edytował Cromwell 28.02.2010, 02:50:47
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo wynik plusa/minusa dla kazdego rekordu zawsze wkladasz do tego samego elementu o tym samym id PLUS smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Cromwell
post
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

Ostrzeżenie: (0%)
-----


Racja smile.gif
Początkowo nie wiedziałem jak to przerobić, ale w końcu wpadłem na rozwiązanie:

W wywoływaniu:
  1. echo ' <b id="plus'.$row['id'].'">'.$row['ocena'].'</b> ';


W funkcji:
  1. function plus(id){
  2. $("#plus"+id).load("vote.php?jak=plus&id="+id);
  3. }

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:27