Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+MySQL] licznik kliknięć
Forum PHP.pl > Forum > PHP
roobik
Witam!
Na początek małe wyjaśnienie. Owszem są różnego rodzaju liczniki "kliknięcia w link" itp, lecz u mnie wydaje się być inny problem
W bazie mam pola:
id - wiadomo
poziom - poziom zaawansowania
temat - temat odpowiadający poziomowi zaawansowania
txt - tekst tematu odpowiadający tematowi zaawansowania (który odpowiada poziomowi zaawansowania biggrin.gif)
tytul - tytuł tematu...(itd) biggrin.gif

Poziomy zaawansowania są 3. w każdym z poziomów jest 20 tematów, czyli w sumie jest 60 tematów.

I teraz np tak: chcąc dostać się do tematu 15 z poziomu 1 adres wygląda tak:
Cytat

Analogicznie - temat 27 z poziomu 3 ma postać
Cytat


Zamiarem moim jest zobaczenie popularności tematu (nawet bez wyświetlenia). Inaczej mówiąc chcę zobaczyć, który z tematów cieszy się największą popularnością. W tym celu dajmy na to dołoże do tabeli pole licz.
I teraz 3 pytania:
1. W jaki sposób zliczać kliknięcia w poszczególne linki?
2. Czy da radę zachować przy tym "liczeniu kliknięć" ww adresy?
3. Co należy dopisać do pliku test.php, by poprawnie zliczał mi kliknięcia?

Bardzo bym prosił o jakiekolwiek wskazówki, być może nawet kodzik... Już nie mam siły... czwarty dzionek (wieczór) się z tym męczę... i byki mi wyskakują...
E-d
W kodzie który wyświetla artykuł czy co tam wyświetlasz (to poziom 3 a txt 2 itp..)
  1. <?php
  2. $zapytanie = "UPDATE tabela SET licz = 'licz+1' WHERE ID = '$_GET[txt]'";
  3. ?>
roobik
...próbowałem wkleić w różne miejsca, co podał e-D i nic sad.gif Ale za to przydało mi się gdzie indziej smile.gif
To co jest poniżej to jest tylko przykład (nawet nie wiem czy działa), żeby była jasność o co chodzi.
  1. <?
  2. $sql = mysql_connect("localhost", "", "");
  3. ?> 
  4. <?php
  5. #
  6. $zapytanie = "UPDATE test SET licz = 'licz+1' 
  7. WHERE ID = '$_GET[txt]'";
  8. #
  9. if (isset($_GET['temat']))
  10. {
  11. if (isset($_GET['txt']))
  12. $pokaz = $_GET['txt'];
  13. else
  14. $pokaz = 'txt';
  15. $id = (int) $_GET['id'];
  16. $stopien = (int) $_GET['poziom'];
  17. $zapytanie = 'SELECT txt FROM test where 
  18.  
  19. temat='.$temat.' AND poziom='.$stopien.' LIMIT 1';
  20. $wykonaj = mysql_query($zapytanie) or 
  21. while($id = mysql_fetch_array($wykonaj))
  22. {
  23. if(!empty($id['txt'])) echo 
  24.  
  25. $id['txt']."<BR><BR>";
  26. else header('Location: index.php');
  27. }
  28. }
  29. else
  30. echo '
  31. # coś tam
  32. ';
  33. ?>
JOHNY
  1. <?php
  2. if (isset($_GET['txt']))
  3. $pokaz = $_GET['txt'];
  4. $zapytanie = "UPDATE test SET licz = 'licz+1' 
  5. WHERE ID = ". $_GET['txt'] ."";
  6. else
  7. ?>


Może tak
roobik
sad.gif też nie -> parse error
będę wdzięczny za inne podpowiedzi...
sad.gif
JOHNY
a w której lini masz error questionmark.gif

albo zobacz tak
  1. <?php
  2. if (isset($_GET['txt']))
  3. $pokaz = $_GET['txt'];
  4. $zapytanie = "UPDATE test SET licz = licz+1
  5. WHERE ID = ". $_GET['txt'] ."";
  6. else
  7.  
  8. ewntualnie
  9.  
  10. if (isset($_GET['txt']))
  11. $pokaz = $_GET['txt'];
  12. $zapytanie = "UPDATE test SET licz = licz+1 
  13. WHERE ID = '$pokaz'";
  14. else
  15. ?>
roobik
JOHNY, czy mógłbyś (poprawnie) dokleić kawałek kodu do mojego?
Ja zrobiłem tak:
  1. <?
  2. $sql = mysql_connect("localhost", "", "");
  3. ?> 
  4. <?php
  5. #
  6. $zapytanie = "UPDATE test SET licz = 'licz+1' 
  7. WHERE ID = '$_GET[txt]'";
  8. #
  9. if (isset($_GET['temat']))
  10. {
  11. # POPRAWKA ODTĄD
  12. if (isset($_GET['txt']))
  13. $pokaz = $_GET['txt'];
  14. $zapytanie = "UPDATE test SET licz = licz+1 
  15. WHERE ID = '$pokaz'";
  16. else
  17. # DOTĄD
  18. $pokaz = 'txt';
  19. $id = (int) $_GET['id'];
  20. $stopien = (int) $_GET['poziom'];
  21. $zapytanie = 'SELECT txt FROM test where 
  22.  
  23. temat='.$temat.' AND poziom='.$stopien.' LIMIT 1';
  24. $wykonaj = mysql_query($zapytanie) or 
  25. while($id = mysql_fetch_array($wykonaj))
  26. {
  27. if(!empty($id['txt'])) echo 
  28.  
  29. $id['txt']."<BR><BR>";
  30. else header('Location: index.php');
  31. }
  32. }
  33. else
  34. echo '
  35. # coś tam
  36. ';
  37. ?>

Cytat(JOHNY)
a w której lini masz error questionmark.gif

Ponieważ przed tym co jest tutaj jest jeszcze w cholerę innych rzeczy, to błąd wyskakuje w linii 429, co w tym momencie i tak nic nie mówi... Poza tym nie korzystam z programu do "kolorowania składni" - piszę w zwykłym notatniku smile.gif
JOHNY
Błąd pewnie wywala Ci w lini 8 także usuń to zapytanie
  1. <?php
  2. #
  3. $zapytanie = "UPDATE test SET licz = 'licz+1' 
  4. WHERE ID = '$_GET[txt]'";
  5. #
  6. ?>

Jeśli stosujesz funkcje $_GET to zmienna powinna być w ['txt']

Pozatym w notatniku też możesz poszukać wiersza biggrin.gif CTR+G smile.gif

  1. <?
  2. $sql = mysql_connect("localhost", "", "");
  3. ?> 
  4. <?php
  5. #
  6. if (isset($_GET['temat']))
  7. {
  8. # POPRAWKA ODTĄD
  9. if (isset($_GET['txt']))
  10. $pokaz = $_GET['txt'];
  11. $zapytanie = "UPDATE test SET licz = licz+1 
  12. WHERE ID = '$pokaz'"; // lub WHERE ID = '.$pokaz.' albo też WHERE ID = '.$_GET['txt'].'
  13. else
  14. # DOTĄD
  15. $pokaz = 'txt';
  16. $id = (int) $_GET['id'];
  17. $stopien = (int) $_GET['poziom'];
  18. $zapytanie = 'SELECT txt FROM test where 
  19.  
  20. temat='.$temat.' AND poziom='.$stopien.' LIMIT 1';
  21. $wykonaj = mysql_query($zapytanie) or 
  22. while($id = mysql_fetch_array($wykonaj))
  23. {
  24. if(!empty($id['txt'])) echo 
  25.  
  26. $id['txt']."<BR><BR>";
  27. else header('Location: index.php');
  28. }
  29. }
  30. else
  31. echo '
  32. # coś tam
  33. ';
  34. ?>


Pozatym radziłbym stosować zapytania w zapytanie ="Select ...."
roobik
sad.gif coś jest popieprzone - wywala mi byka w tym wierszu:
Cytat
$zapytanie = "UPDATE test SET licz = licz+1
WHERE ID = '$pokaz'";

gdy tego wiersza nie ma wszystko jest OK... z tym, że "nie liczy" kliknięć...

...chyba przyjdzie mi się obyć bez "licznika" sadsmiley02.gif
macza
Cytat(roobik @ 2006-05-06 13:34:50)
sad.gif coś jest popieprzone - wywala mi byka w tym wierszu:
Cytat

$zapytanie = "UPDATE test SET licz = licz+1
WHERE ID = '$pokaz'";

gdy tego wiersza nie ma wszystko jest OK... z tym, że "nie liczy" kliknięć...

...chyba przyjdzie mi się obyć bez "licznika" sadsmiley02.gif

  1. <?php
  2. $zapytanie='UPDATE test SET licz="licz+1" WHERE ID="'.$pokaz.'"';
  3. ?>
roobik
macza - jest już lepeij - nie wywala błędów... lecz również nie zlicza sad.gif
być może nie w tym miejscu wkleiłem to, co odpowiada za zliczanie...
E-d
  1. <?php
  2. $ile = $rekord['licz']+1;
  3. $zapytanie="UPDATE `test` SET `licz` = '$ile' WHERE `ID`='$id'";
  4. ?>
roobik
E-d - zarówno Twój jak kod jak i kod macza są OK... ale nie zmienia to faktu, że niestety... nie zliczana jest ilośćkliknięć sadsmiley02.gif

nie wiem , czy coś to pomoże ale:
rekordów (id) jest 60
poziomów (poziom) jest 3
tematów (temat) jest 20 w każdym poziomie, czyli razem 60 (tak jak id)
Pola poziom i temat są wartościami liczbowymi

Ps.
W pierwszym poście wystąpiła pomyłka.
Odpowiednie linki brzmią:

Cytat

oraz
Cytat

Jeśli jest to bardzo poważna różnica - przepraszam za wprowadzenie w błąd.
E-d
  1. <?php
  2. $id = $_GET['temat'];
  3. $ile = 5;
  4. mysql_query("UPDATE `test` SET `licz` = '$ile' WHERE `ID`='$id'") or 
  5. ?>

To już musi działać, testowałem u siebie. Jeśli nie to zrób tak. Włącz PhpMyAdmin, w tabeli edytuj pole ręcznie, gdy pokaże ci się kod kliknij "Utwórz kod php" i wklej do zapytania.
roobik
E-d - DZIAŁA! smile.gif
...teraz tylko jest problem aby nie pokazywało aktualną liczbę kliknięć - bo ile razy bym nie kliknął w dany temat, to pokazuje mi się 5 (odpowiada za to $ile = 5;).
E-d
  1. <?php
  2. $id = $_GET['temat'];
  3. $rekord = mysql_fetch_array(mysql_query("SELECT * FROM `test` WHERE `ID` = '$id'")));
  4. $ile = $rekord['licz']+1;
  5. mysql_query("UPDATE `test` SET `licz` = '$ile' WHERE `ID`='$id'") or 
  6. ?>
roobik
sad.gif
w międzyczasie próbowałem różnych sposobów, również bardzo podobny do Twojego
  1. <?php
  2. $id = $_GET['temat'];
  3. $rekord = mysql_fetch_array(mysql_query("SELECT * FROM `test` WHERE `ID` = '$id'")));
  4. $ile = ile+1;
  5. mysql_query("UPDATE `test` SET `licz` = '$ile' WHERE `ID`='$id'");
  6. ?>

ale niestety sad.gif ... wywala parse error
zaraz mnei chyba coś trafi.... już zaczynam mieć dość ... sad.gif (na dzisiaj)
macza
  1. <?php
  2. $id = $_GET['temat'];
  3. $pytanie='SELECT * FROM test WHERE id="'.$id.'"'; 
  4. $wykonaj=mysql_query($pytanie); 
  5. while($pole=mysql_fetch_array($wykonaj)){
  6. $rekord=$pole[licz];
  7. }
  8. $ile = $rekord['licz']+1;
  9. mysql_query('UPDATE test SET licz= "'.$ile.'" WHERE id="'.$id.'"')
  10. ?>

i powinno dzialac!
roobik
Słuchajcie .........
DZIAŁA!
kurde... wielkie DZIEKI....
brakowało tylko średnika na końcu w kodzie macza lae jest OK
Chłopaki ... wielkie T.H.A.N.X.exclamation.gif!!
smile.gif

...ale żeśmy (żeście winksmiley.jpg ) wymaglowali temat smile.gif

POZDRAWIAM exclamation.gif!!!!!!
macza
  1. <?php
  2. $id = $_GET['temat'];
  3. $pytanie='SELECT * FROM test WHERE id="'.$id.'"'; 
  4. $wykonaj=mysql_query($pytanie); 
  5. while($pole=mysql_fetch_array($wykonaj)){
  6. $rekord=$pole[licz];
  7. }
  8. $ile = $rekord['licz']+1;
  9. mysql_query('UPDATE test SET licz= "'.$ile.'" WHERE id="'.$id.'"');
  10. ?>

poprawione dzialajace! ;D :roll2:
E-d
macza ale skoro pobierasz tylko tylko jeden, wybrany rekord poco pętli while używasz ?
roobik
miałem odpowiedzieć na PW do mnie, ale sam teraz się zdziwiłem
Mnie nie jest to potrzebne - to co chciałem to już mam (dziękuję!)

Na PW ktoś zapytał jak wyświetlać takie cudo stworzone przez nas wszystkich - no to wpdłem na taki pomysł:
  1. <?php
  2.  
  3. pisz = mysql_result(mysql_query("SELECT licz 
  4. FROM test WHERE id=x"),0,0);
  5. echo " (<B> $pisz </b>) ";
  6.  
  7. ?>

...i wszystko byłoby OK, gdyby nie pewien fakt.
Jeśli chodzi o poziom 1 - liczenie (zliczanie) odbywa się prawidłowo
Ale jak już klikamy np w temat 1 z poziomu 2 to owszem zliczanie też się odbywa.... ale dla tematu 1 z poziomu 1 !

Tak samo jeśli chodzi np o temat dajmy na to 5 z poziomu 3 - zliczanie odbywa się dla tematu 5, ale z działu... 1!

//edit
za x trzeba podstawić oczywiście liczbę odpowiadającą tematowi smile.gif

Może jakieś pomysły?

//edit 2
chyba "winnego" trzeba szukać w tym:
  1. <?php
  2.  
  3. $ile = $rekord['licz']+1;
  4. mysql_query("UPDATE test SET licz=$ile WHERE id=$id");
  5.  
  6. ?>
matrach
  1. UPDATE test SET licz=$ile WHERE id='x' AND poziom='y'
Może tak?
roobik
to byłoby zbyt proste - też tak próbowałem, ale :
- to nie działa (to raz)
- nawet gdyby działało to odwoływałoby się TYLKO do poziomu y , a nie do wszystkich trzech poziomów smile.gif

//edit
- właśnie sprawdziłem : jakby był tylko jeden poziom to byłoby OK, tylko, że wtedy
Cytat
AND poziom='y'

wydaje się być zbędne smile.gif
E-d
  1. UPDATE `test` SET `licz` = $ile WHERE `id` = 'x' AND `poziom` = 'y'

Zobacz tak, i edytuj wpisy w PMA i patrz jaki kod Ci wyświetla.
roobik
E-d próbowałem na różne sposoby, nawet tak, że wpisywałem za każdym razem to co podałeś zmieniając tylko odpowiednio x i y - niestety - to samo.
Ten x w moim poprzednim poście to tylko przykład - nie sugerujcie się nim.

Próbowałem zaś też czego innego:
  1. <?php
  2.  
  3. pisz = mysql_result(mysql_query("SELECT licz 
  4. FROM test WHERE id=$id AND poziom=$poziom"),0,0);
  5. echo " (<B> $pisz </b>) ";
  6.  
  7. ?>

ale to bez sensu... - wartości się zerują przy odświeżeniu

I jeszcze tak na koniec - w miarę możliwości i czasu postaram się napisać jakiś licznik z odpowiednią funkcją, która poprawnie zliczałaby kliknięcia... A może coś będzie w googlach... Bardzo proszę o pomysły.
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.