Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak zrobićzliczanie kliknięć?
Forum PHP.pl > Forum > Przedszkole
roobik
Witam!
Mam taki oto kod:
  1. $zapytanie = "INSERT INTO `".prefix."download`
  2. (
  3. `id`,
  4. `nazwa_gl`,
  5. `nazwa_ro`,
  6. `opis`,
  7. `opis_ro`,
  8. `licencja`,
  9. `data`,
  10. `cat,`,
  11. `licz`
  12. )VALUES(
  13. '',
  14. '".$n1."',
  15. '".$n2."',
  16. '".$op."',
  17. '".$opr."',
  18. '".$lic."',
  19. '".$data."',
  20. '".$cat."',
  21. '0'
  22. )";

Chodzi o ostatnią kolumnę.
Jaki kod muszę napisać, by za każdym kliknięciem pole LICZ zwiększało się o 1?
Kamil Pietrzak
pobierasz z bazy ilosc klikniec, zwiekszasz o 1 i spowrotem zapisujesz...
gothye
albo stosujesz auto_increment winksmiley.jpg w bazie 
roobik
ok smile.gif Domyśliłem się, że trzeba to najpierw "odczytać", a potem zrobić coś, by dodało 1... Ale jak? sad.gif
iVorIus
1. Pobierasz dane, zapisując je do zmiennej.
2. Zmieniasz dane ze zmiennej.
3. Zapisujesz zmienną w bazie.
Kamil Pietrzak
$a = 1;
$a = $a+1;
echo $a; // wyswietli 2

zamiast $a = $a + 1; mozna dac $a++; / ++$a;
roobik
W porządku. Więc wyświetlam link kodem (wycinek całosci, ale to ta część nas interesuje):
  1. echo '<a href="'.$www.'">Coś tam</a>';

czy to $a = $a+1; mam dodać do adresu? Nie kumam tego sad.gif
Kamil Pietrzak
jesli chcesz liczyc klikniecia w link to musisz np. zrobic strone posrednia na ktorej bedzie skrypt
lub ten sam skrypt, wczytywany przez ajax
czy cos
gothye
ale po co questionmark.gif skoro napisałem Ci wyżej co trzeba zrobić ,a sam serwer SQL zajmie sie incremetacją pola exclamation.gif użyj google...
MateuszS
zalezy czy $www przenosi na podstrone czy na jakas obca, dziwna, nie twoja... strone. W sumie powinienes tak czy siak zastosowac $_GET np.

  1. <a href="strona.php?page=1">Strona 1</a>
  2. <a href="strona.php?page=2">Strona 2</a>


Potem na strona.php w zaleznosci od wart. tablicy $_GET["page"], dodawac do bazy +1 (tak jak koledzy wyzej napisali) a potem przekierowac na docelowa strone

chyba o to Ci chodzi?
roobik
Mniej więcej zaczynam rozumieć. Tylko, że ja myślałem, że przed wyświetleniem linka (linku?) trzeba dać coś na styl:
  1. if kliknięcie to $licz=$licz+1


Za pomocą zmiennej $www wyświetlam zewnętrzne linki do plików
Czyli załóżmy tak:
Gość wchodzi na podstronę z danym plikiem, widzi, że ilość kliknięć to 10, robi click, pobiera plik, a przy kolejnym odświeżeniu tej strony widzi, że ilość kliknięć to 11

Szukałem na google, ale to jest tak zamotane w niektórych przypadkach, że aż w żołądku się przewraca... A ja chcę zrozumieć w jaki sposób "poinformować" bazę by po kliknięciu w link zwiększyła wartość pola licz o 1
john_doe
// a jak zliczyć ilość kliknięć w zdjęcie, kiedy używamy lightboxa? zdjęcia nie są wyświetlane z bazy tylko z katalogu poprzez scandir();

questionmark.gif
thek
Podpinasz zdarzenie onClick i to ono będzie odpowiadać za inkrementację licznika. Na końcu dasz jeszcze returnfalse i powinno być cacy smile.gif Znaczy wyjdzie Ci coś w stylu:

onclick="jakiś_inkrementator(id); return false;"

roobik
OK. Panowie, doszedłem do tego, że w linku (po najechaniu na niego) mam coś takiego:
  1. http://costam.pl/index.php?co=site&cat=4&id=21

I teraz tak: W jaki sposób za pomocą tego linka mogę ściągnąć plik, który znajduje się w polu www - przed "zmianami miałem coś jak
  1. http://costam.pl/FILES/program.rar

Być może wystarczy link taki:
  1. http://costam.pl/index.php?co=site&id=21

i spod tego id po kliknięciu trzeba pobrać plik oraz powiększyć o 1 pole LICZ
sciana.gif

//edit
dodałem też kod:
  1. $result = mysql_query("UPDATE tab_www SET licz=licz+1 WHERE id=$id");

zlicza on coprawda ilość, ale nie kliknięć ale odświeżeń strony
Rysh
Najłatwiej chyba tak:
Link pobierz.php?plik=23 oraz kod:
  1. <?php
  2. if(isset($_GET['plik'])) {
  3. //sprawdzasz czy taki rekord istnieje
  4. //jesli tak, pobierasz jego dane
  5. //dodajesz + 1 do pobrań
  6. //update bazy
  7. echo "Wyświetlasz link do <a href=\"http://twojastrona.pl/FILES/". $row['url'] ."\">pobrania</a>";
  8. echo "Dodatkowo możesz dać w meta, żeby po 5 sekundach przeniosło do pliku.";
  9. } else {
  10. //zapytanie do bazy, wyświetlasz wszystkie pliki z bazy
  11. echo "<a href=\"pobierz.php?id=". $row['id'] ."\">". $row['nazwa'] ."</a>";
  12. }
  13. ?>


W bazie kolumny, id, nazwa (opis pliku) oraz url (nazwa pliku), pobrań.
roobik
Problem w tym, że jak kliknę w link (przykładowo):
  1. 1.http://costam.pl/index.php?co=site&id=21

to wywala mnie na stronęgłówną i plik się nie pobiera, a liczba kliknięć się zwiększa o 1

//edit
Plik jest - nie ma co sprawdzać winksmiley.jpg

Inaczej:
Wchodząc na stronę
  1. 1.http://costam.pl/index.php?co=site&cat=4

wyświetlane sąwszystkie pliki z kategorii 4
pliki w danej kategorii to:
  1. 1.http://costam.pl/index.php?co=site&cat=4&id=21

Jak za pomocą tego linka ściągnąć plik? Oczywiście również żeby się nie zwiększał LICZ przy odświeżaniu, a jedynie jak ktoś kliknie w ten link...
QooBooS
Witam.
Proponuję zrobić tak, jak napisali moi poprzednicy. Z tym że nie wyjaśnili, jak to zrobić smile.gif Ja postaram się to uczynić.

Na początek dodaj do bazy pole o nazwie 'adres'. Będzie ono przechowywało link, na który serwer przekieruje Cię po wejściu na stronę zliczającą.
Niech każdy plik do ściągnięcia i link do niego to będzie jeden wiersz w tabeli.
Jeśli masz jaki formularz dodawania plików, dodaj do niego pole adresu i odpowiednio zmodyfikuj kod, by wstawiał jego zawartość do bazy danych.
Na przykład tak:
  1. echo "Adres: <input type='text' name='adres'/>";

A na stronie zbierającej dane z formularza do zapytania SQL dodaj:
Kod
INSERT INTO ...
) VALUES (
...,
adres='".$_POST['adres']."',
...)

Kropki to oczywiście ta "reszta", którą już masz.

Następnie robisz stronę przekierowującą, niech będzie to sciagnij.php. Wklejasz do niej taki kod:
  1. <?php
  2. require_once "nazwa_twojego_pliku_z_funkcjami.php"; // O ile go masz
  3. $id = $_GET['id'];
  4. $zapytanie = mysql_query("SELECT * FROM tab_www WHERE id='$id' LIMIT 1");
  5. if ($zapytanie)
  6. {
  7. $dane = mysql_fetch_array($zapytanie);
  8. $zwieksz_licznik = mysql_query("UPDATE tab_www SET licz=licz+1 WHERE id='$id'");
  9. header("Location: ".$dane['www']);
  10. } else {
  11. die("Blad polaczenia!");
  12. }
  13. ?>


Teraz wystarczy odpowiednio skonstruować link i gotowe smile.gif
Link powinien wyglądać tak:
  1. <a href='sciagnij.php?id=1'>Kliknij tutaj, aby pobrać</a>

Gdzie 1 to id wiersza z tabeli odpowiadającego za dany plik smile.gif
roobik
Wow... Dziękuję za porządne wyjaśnienie smile.gif
Nie sprawdziełm tego jeszcze (późna pora), lecz trapią mnie jeszcze takie pytania:
1) Po co robić przekierowanie na sciagnij.php...? Na wielu stronach pliki są pobierane z adresu http://jakas_strona.pl/index.php?co=site&cat=4&id=21 i nie ma żadnego przekierowania...
chyba że:
2) po przekierowaniu na stronę sciagnij.php... rozpoczyna się pobieranie pliku i automatycznie jest ponowne przekierowanie na stronę poprzednią...
QooBooS
Tak, często tak jest. I Ty też możesz to zrobić. Wystarczy, zamiast do sciagnij.php, wkleić ten kod do index.php i ustalić, aby kod ten był wykonywany, gdy podano $_GET['co'], $_GET['cat'] i $_GET['id'].
Przykład:
  1. ...
  2. if (isset($_GET_['co']) && isset($_GET['cat']) && isset($_GET['id'] && is_int($_GET['cat']) && is_int($_GET['id']))
  3. {
  4. $id = $_GET['id'];
  5. $zapytanie = mysql_query("SELECT * FROM tab_www WHERE id='$id' LIMIT 1");
  6. if ($zapytanie)
  7. {
  8. $dane = mysql_fetch_array($zapytanie);
  9. $zwieksz_licznik = mysql_query("UPDATE tab_www SET licz=licz+1 WHERE id='$id'");
  10. header("Location: ".$dane['www']);
  11. } else {
  12. die("Blad polaczenia!");
  13. }
  14. }
  15. ...

Teraz linki do plików tworzysz tak, jak w moim poprzednim przykładzie, jednak nie odnosisz się do sciagnij.php, tylko do index.php?co=site&cat=numerkaterogii&id=identyfikator.
athei
Taka mała uwaga to tego co napisał QooBooS powyżej.
Warunek nigdy się nie spełni, bo wartość z $_GET zawsze jest stringiem, czyli plik.php?id=2 $_GET['id'] to string '2'.
Do wyboru jest rzutowanie is_int((int)$_GET['id']), is_numeric && !is_float, intval, regexp ...
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.