Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi
Cromwell
post
Post #2





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

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 03:13