Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ostatnia przeglądana strona
Forum PHP.pl > Forum > Bazy danych
RosheD
Witam bardzo serdecznie.
Potrzebował bym kodu który będzie zapamiętywał jaki dany użytkownik był ostatnio na stronie. Np w panelu po zalogowaniu było by "ostatnio byłeś na 18.php".
Nie wiem jak jaśniej wyjaśnić. Z góry dziekuje za pomoc smile.gif
_Borys_
$_SERVER['REQUEST_URI'];
Tu między innymi masz plik uruchomiony przez użytkownika, wyciągasz nazwę i zapisujesz przy każdym ruchu użytkownika.
RosheD
Mógł byś podać na przykładzie pełnego kodu?
_Borys_
Po prostu dodajesz do bazy dodatkową kolumnę i w niej robisz UPDATE za każdym razem gdy użytkownik porusza się po stronie.
Robisz UPDATE obok użytkownika który jest zalogowany, a który to, to już wiesz z sesji albo ciasteczek.
Kshyhoo
Kiedyś zrobiłem coś podobnego tak:
  1. // logowanie odwiedzających
  2. function loguj_ip() {
  3. $ip = $_SERVER["REMOTE_ADDR"];
  4. $przegladarka = $_SERVER["HTTP_USER_AGENT"];
  5. $znacznik = sprintf("%u", crc32($ip.$przegladarka));
  6. $referer = $_SERVER["HTTP_REFERER"];
  7. $adres = $_SERVER["REQUEST_URI"];
  8.  
  9. $wynik = mysql_query("SELECT * FROM ip_dane WHERE znacznik=$znacznik");
  10. if (mysql_num_rows($wynik)==0) {
  11. mysql_query("INSERT INTO ip_dane (znacznik, ip, przegladarka, referer) VALUES ($znacznik, '$ip', '$przegladarka', '$referer')");
  12. }
  13. mysql_query("INSERT INTO ip_strony (znacznik, data, adres) VALUES ($znacznik, NOW(), '$adres')");
  14.  
  15. $wynik = mysql_query("SELECT znacznik, max(data) as data1, DATE_SUB(NOW(),INTERVAL 1 YEAR) as data2 FROM ip_strony GROUP BY (znacznik);");
  16. $wierszy = mysql_num_rows($wynik);
  17. for ($i=0;$i<$wierszy;$i++) {
  18. $wiersz = mysql_fetch_array($wynik);
  19. if ($wiersz["data1"]<$wiersz["data2"]) {
  20. mysql_query("DELETE FROM ip_strony WHERE znacznik={$wiersz["znacznik"]}");
  21. mysql_query("DELETE FROM ip_dane WHERE znacznik={$wiersz["znacznik"]}");
  22. }
  23. }
  24. }

Funkcję loguj_ip(); musisz dodać wszędzie, gdzie chcesz logować akcje usera. Z bazą chyba sobie poradzisz?
RosheD
Z tego co rozumiem to z tego kodu muszę dodać do sql rubryki : Ip,przegladarka,znacznik,referer,adres tak?
Jeśli się myle to przepraszam naprawe nie rozumiem jeszcze sql jak i javascritpów(ale rozumiem jak wstawiać ale nie jak je pisać)
Dodałem to do php i odczytałem za pomocą include. Teraz jak dodać do bazy danych i gdzie tu jest nazwa odpowiedzialna za dane rubryki jak i całą grupę?
Leci pomógł!
Kshyhoo
Wybierz te, które potrzebujesz...
RosheD
No wiem przecież. Ale tu chodzi o to czy ja bym dobre dane do sql dodał. Bo nie zbyt się na tym znam.
Kshyhoo
Jak widzisz, masz dwa inserty do bazy danych:
1:
  1. INSERT INTO ip_dane (znacznik, ip, przegladarka, referer)

2:
  1. INSERT INTO ip_strony (znacznik, DATA, adres)

Potrzebne są więc dwie tabele, ale możesz to dostosować do swoich potrzeb. Żeby wyświetlić dane, możesz zrobić np. tak:
  1. if ($znacznik == '') {
  2.  
  3. $wynik = mysql_query("SELECT *, count(ip_strony.adres) as ilestron FROM ip_dane, ip_strony WHERE ip_dane.znacznik=ip_strony.znacznik GROUP BY (ip_dane.znacznik) ORDER BY ilestron DESC;");
  4. $wierszy = mysql_num_rows($wynik);
  5. echo '<table><caption>Ruchy Odwiedzających</caption>
  6. <tr>
  7. <td width="40px"> IP </td>
  8. <td width="20px"> Stron </td>
  9. <td width="200px"> Przeglądarka, system </td>
  10. <td width="200px"> Odwiedzane strony </td>
  11. </tr>';
  12. for ($i=0;$i<$wierszy;$i++) {
  13. $wiersz = mysql_fetch_array($wynik);
  14. echo '<tr>
  15. <td> <a href="index.php?go=szpieg&znacznik='.$wiersz['znacznik'].'">'.$wiersz['ip'].'</a> </td>
  16. <td> '.$wiersz['ilestron'].' </td>
  17. <td> '.$wiersz['przegladarka'].' </td>
  18. <td> <a href='.$wiersz['referer'].'>'.$wiersz['referer'].'</a> </td>
  19. </tr>';
  20. }
  21. echo '</table>';
  22.  
  23. } else {
  24.  
  25. $wynik = mysql_query("SELECT * FROM ip_strony, ip_dane WHERE ip_dane.znacznik=ip_strony.znacznik AND ip_strony.znacznik=$znacznik ORDER BY ip_strony.data;");
  26. $wierszy = mysql_num_rows($wynik);
  27.  
  28. echo '<table><caption> Informacja o Odwiedzającym </caption>
  29. <tr>
  30. <td width="100px"> Data </td>
  31. <td width="400px"> Adres </td>
  32. </tr>';
  33. for ($i=0;$i<$wierszy;$i++) {
  34. $wiersz = mysql_fetch_array($wynik);
  35. echo '<tr >
  36. <td> '.$wiersz['data'].' </td>
  37. <td> '.$wiersz['adres'].' </td>
  38. </tr>';
  39. }
  40. echo '</table>';
  41.  
  42. echo 'IP: '.$wiersz['ip'].' <br />
  43. Domena: '.@gethostbyaddr($wiersz['ip']).' <br />
  44. Przeglądarka, system: '.$wiersz['przegladarka'].' <br />
  45. Skąd: '.$wiersz['referer'].' <br />';
  46. }

Mam nadzieję, że nic nie pokićkałem smile.gif
RosheD
Czyli tak powinna wyglądać baza danych z tego co rozumiem.
  1. CREATE TABLE IF NOT EXISTS users (
  2. znacznik varchar(32) NOT NULL,
  3. przegladarka varchar(32) NOT NULL,
  4. adres varchar(255) NOT NULL,
  5. PRIMARY KEY (id)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;



wklepałem wszystko jak jest. Z kodu który podałeś zrozumiałem tyle że <td> zapisuje dane. Zgadza się?
Baza danych jest połoczona oraz został dodana struktura a dane nei zostały tam zmienione. Mógł byś jeszcze jaśniej?
Kshyhoo
Cytat(RosheD @ 22.09.2013, 19:14:22 ) *
Z kodu który podałeś zrozumiałem tyle że <td> zapisuje dane. Zgadza się?

Nie, to znacznik komórki tabeli.
Cytat(RosheD @ 22.09.2013, 19:14:22 ) *
Baza danych jest połoczona oraz został dodana struktura a dane nei zostały tam zmienione. Mógł byś jeszcze jaśniej?

Nie wiem, co zrobiłeś a czego nie...
RosheD
no więc dodałem 2 grupy do sql który nazywają się ip_dane oraz ip_strony do tej pierwszej dodałem tabele: znacznik, ip, przegladarka, referer. Zaś do 2'giej : znacznik, DATA, adres
skopiowałem cały kod który napisałeś wkleiłem go do php dodałem inny php który łączy się z bazą danych i podlinkowąłem za pomocą include to do głównej strony. I jak mówiłem wcześniej nie dodają się dane do sql.
Kshyhoo
A zadeklarowałeś wywołanie funkcji?
RosheD
Noo jak widzisz nie zrobiłem bo nie mam pojęcia jak to zrobić mógł bys wyjasnić ?
Kshyhoo
Przeczytaj jeszcze raz post, za który dałeś "pomógł". Tam napisałem, co trzeba zrobić. Naucz się pracować samodzielnie, praktyka jest niezastąpiona.
RosheD
Cały czas staram się to zrobić samemu.
Ciągle wyskakuje ten błąd "
Fatal error: Cannot redeclare loguj_ip() (previously declared in /home/u557143795/public_html/index.php:30) in /home/u557143795/public_html/strona.php on line 26 "
w stronie głównej mam podany taki kod:
  1. <?php
  2. include('strona.php');
  3. ?>

a w tym "strona.php" mam podany kod który ty mi podałeś + łącze.
Kshyhoo
A loguj_ip(); gdzie masz?
RosheD
Na dole wspomnianego wcześniej "strona,php"
  1. }
  2. }
  3. }loguj_ip();
  4. ?>

Myśle że może tak to wyglądać.
Kshyhoo
Nie czytasz tego, co piszę. loguj_ip(); musisz dołączyć wszędzie (na każdej stronie), która ma być kontrolowana. Cannot redeclare loguj_ip() oznacza, że funkcja już wcześniej została zadeklarowana i parser wyrzucił błąd.
RosheD
Czyli po prostu ten plik "strona.php" może sobie leżeć obok strony głównej a samo loguj_ip(); będzie wszystko wczytywało?

kod który podałeś wyświetla dane wszystkich a nie dane osoby na którą jest się aktualnie zalogowany. Mógł byś ten kod przerobić lub wytłumaczyć co i jak?

Refresh. Potrzebuje kody który będzie zapisywał dane tylko dla każdego użytkownika z osobna. Oraz w razie potrzeby krótki tut jak co się z czym je.
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.