Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][Java] onclick - jak zrobić
Forum PHP.pl > Forum > Przedszkole
MaTeK_
Witam.
Przeglądam internet i nie mogę znaleźć normalnego rozwiązania. Prosiłbym po prostu o zwykły kod, który będzie działał na zasadzie, że ktoś kliknie w przycisk "tekst" i po kliknięciu pokaże się ile razy klikano w przycisk. Była gdzieś akcja, że klikało się "Postaw znicz" i po tym pokazywano "x osób postawiło znicz" - gdzie x to liczba kliknięć w ten guzik. Nie wiem jak dokładnie się nazywa, ale chyba onclick
smietek
Do tego elementu dodajesz akcję po kliknięciu (tak, najłatwiej onclick). Wykonujesz AJAXem skrypt PHP, który dodaje do bazy danych daną wartość (1), a następnie zwraca ilość kliknięć w przycisk i wyświetla obok/na tym elemencie.
mmica
Hey ;]

Sam z ciekawości spróbowałem to napisać, bo jeszcze nigdy wcześniej tego nie pisałem. Całe rozwiązanie oparłem o cztery pliki: index.html, ajax.js, licznik.php oraz licznik.txt. W index.html masz button i dołączony plik ajax.js obsługujący go, a w licznik.php skrypt PHP, który zapisuje kliknięcia i zwraca ich ilość. Plik licznik.txt przechowuje informację o kliknięciach.

index.html:
  1. <head>
  2. <script type="text/javascript" src="./ajax.js"></script>
  3. </head>
  4. <button onclick="MakeRequest()">Click!</button>
  5. <div id="licznik">
  6. </div>
  7. </body>
  8. </html>


ajax.js:
[JAVASCRIPT] pobierz, plaintext
  1. function getXMLHttp()
  2. {
  3. var xmlHttp
  4.  
  5. try
  6. {
  7. //Firefox, Opera 8.0+, Safari
  8. xmlHttp = new XMLHttpRequest();
  9. }
  10. catch(e)
  11. {
  12. //Internet Explorer
  13. try
  14. {
  15. xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  16. }
  17. catch(e)
  18. {
  19. try
  20. {
  21. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  22. }
  23. catch(e)
  24. {
  25. alert("Your browser does not support AJAX!")
  26. return false;
  27. }
  28. }
  29. }
  30. return xmlHttp;
  31. }
  32.  
  33. function MakeRequest()
  34. {
  35. var xmlHttp = getXMLHttp();
  36.  
  37. xmlHttp.onreadystatechange = function()
  38. {
  39. if(xmlHttp.readyState == 4)
  40. {
  41. HandleResponse(xmlHttp.responseText);
  42. }
  43. }
  44.  
  45. xmlHttp.open("GET", "ajax.php?get=qwe", true);
  46. xmlHttp.send(null);
  47. }
  48.  
  49. function HandleResponse(response)
  50. {
  51. document.getElementById('licznik').innerHTML = response;
  52. }
[JAVASCRIPT] pobierz, plaintext


licznik.php:
  1. <?php
  2. if(isset($_GET['get']))
  3. {
  4. $clicks = @file_get_contents('./licznik.txt');
  5. @file_put_contents('./licznik.txt', $clicks+1, LOCK_EX);
  6.  
  7. echo $clicks.' clicks!';
  8. }
  9. ?>


Plikowi licznik.txt musimy nadać prawa do zapisu! W innym wypadku otrzymamy błąd zapisu do pliku. Napisane na szybko aaevil.gif!

Pozdrawiam,
mmica
MaTeK_
Kod
/ajax.php was not found on this server.

taki mam komunikat
mmica
Mój błąd .. tak się kończy edytowanie kodu zaraz przed wysłaniem (zmieniłem nazwy plików i nie uwzględniłem tego w kodzie). Błąd znajduje się w pliku ajax.js w linii 45.

Jest:
[JAVASCRIPT] pobierz, plaintext
  1. xmlHttp.open("GET", "ajax.php?get=qwe", true);
[JAVASCRIPT] pobierz, plaintext

a powinno być:
[JAVASCRIPT] pobierz, plaintext
  1. xmlHttp.open("GET", "licznik.php?get=qwe", true);
[JAVASCRIPT] pobierz, plaintext

Pozdrawiam,
mmica
MaTeK_
Działa. Dzięki wielkie .
bartek_fm
Mam dwa pytania.

Czy ten kod uniemożliwia zliczanie kliknięć przez tę samą osobę.
Czy jest możliwość zbudowania takiego skryptu z mniejszą ilością plików?

Pozdrawiam,
Bartek
mmica
@bartek_fm:
1. Nie, ale możesz to zrobić dodając do jakiejś bazy IPs klikających i sprawdzać, czy IP kolejnego klikającego nie znajduje się przypadkiem już w bazie, a jeżeli tak, to nie dodawać kliknięcia. To samo możesz zrobić w oparciu o cookies, ale jest to mniej pewny sposób.

2. Tak. Na upartego możesz to wszystko umieścić w jednym pliku.

Pozdrawiam,
mmica
hultman
Dzięki bardzo, mi także się przydały informacje zawarte w tym temacie.
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.