Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Jak najlepiej zapisywać logi?
koxu1996
post
Post #1





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Witam. Posiadam stronę na której mam button. Chcę zapisywać każde kliknięcie i je obok wyświetlać. Nie wiem jak najlepiej zapisywać historie tych kliknięć żeby strona była zoptymalizowana. Lepiej zrobić to w pliku txt czy może w mysql?

P.s Wiecie może jak w porównaniu do pliku txt mysql wykonuje operacje?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
CTRL
post
Post #2





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Ja osobiście trzymam tablicę $_GET i $_POST w bazie mysql, razem z datą, ip itp. Baza danych zazwyczaj (chyba) jest w końcu przechowywana w plikach, lecz ma to większe znaczenie jeśli ktoś się decyduje na przechowywanie plików w blobie w bazie, ale nie o tym teraz. Jeśli chcesz tylko zapisywać a nie manipulować tym potem to zdecydowanie baza danych.
Go to the top of the page
+Quote Post
koxu1996
post
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Chcę zapisywać te informacje do bazy i je później odczytywać. Mankamentem jest to że może być kilkadziesiąt buttonów a w każdym po kilkaset kliknięć. Czy odczytanie kilkuset rekordów z mysql nie będzie trwać więcej niż z pliku tekstowego?
Go to the top of the page
+Quote Post
CTRL
post
Post #4





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Czytelność zdecydowanie większa jest w bazie, szczególnie gdy się zapisuje każdą odsłonę forum, ponieważ usuwam z logów te bezużyteczne, czyli np. odświeżenie shoutboxa, które się wykonuje samoistnie. jedno zapytanie nawet przez klienta mysql i problem z głowy. Plik .txt jest również dostępny dla innych. (to zależy jak się postarasz żeby nie był) Być może będziesz coś modyfikował czy co, ja radzę mysql (IMG:style_emoticons/default/smile.gif) Ale to Twój wybór
Go to the top of the page
+Quote Post
skowron-line
post
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Zainteresuj się mongo
http://www.progresowi.pl/2011/11/10/porown...vs-mongodb.html
patrząc na ten test zapowiada się imponująco.
Go to the top of the page
+Quote Post
koxu1996
post
Post #6





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Ale czy baza mysql nada się do trzymania kilkuset tabel i w każdej po kilkaset rekordów? Bo mógłbym zrobić do każdego buttona inny plik i w nim trzymać logi. Co lepsze według was?
Go to the top of the page
+Quote Post
strife
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


A może warto się posłużyć tym co oferuje Google Analytics? Masz tam opcję trackingu eventów tego typu, hm ...
Go to the top of the page
+Quote Post
CTRL
post
Post #8





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Warto, ale ja to tam wolę mieć swoje (: A nie lepiej zrobić jedną tabele i zapisywać też id buttona?
Go to the top of the page
+Quote Post
konrados
post
Post #9





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


@koxu1996:
Cytat
Witam. Posiadam stronę na której mam button. Chcę zapisywać każde kliknięcie i je obok wyświetlać


Ale, że co, dla każdego buttona trzymasz liczbę kliknięć wszystkich userów tak? Czy może dla każdego z osobna? Zresztą to bez znaczenia, baza na pewno jest lepszym rozwiązaniem.

Cytat
Ale czy baza mysql nada się do trzymania kilkuset tabel i w każdej po kilkaset rekordów? Bo mógłbym zrobić do każdego buttona inny plik i w nim trzymać logi. Co lepsze według was?


Kilkaset tabel?(IMG:style_emoticons/default/questionmark.gif) Chcesz trzymasz każdy button w osobnej tabeli czy może czegoś nie rozumiem? Robimy tak (struktura tabeli):
nazwa tabeli: button_clicks
id (int, autoincrement)
button_id (int): można zamienić na varchar jak wolisz posługiwać się nazwami, ale to mało optymalne)
clicks (int): czyli liczba kliknięć.

I wtedy, by uzyskać liczbę klików:
Cytat
SELECT * from button_clicks WHERE `button_id`=id_danego_buttona
Go to the top of the page
+Quote Post
CTRL
post
Post #10





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Raczej myślę że on by chciał zapisywać kliknięcie użytkownika razem z danymi użytkownika, czyli w jednej tabeli znajdzie się id, id użytkownika, id buttona, i ewentualnie ip, user agent itp.
Go to the top of the page
+Quote Post
rossecki
post
Post #11





Grupa: Zarejestrowani
Postów: 39
Pomógł: 3
Dołączył: 3.12.2011

Ostrzeżenie: (0%)
-----


Spróbuj może zrobić button który w momencie kliknięcie będzie tworzył zmienną np
  1. $log1 = "button nazwa"
, wyślij tą zmienną w postaci POST do wywoływanej strony.
Następnie stwórz plik który będzie można includować na początku każdej strony, a który będzie sprawdzał czy taka zmienna została przekazana jeśli tak odczytywał tą zmienną a następnie w krótkiej komendzie dodawał do bazy danych np w formie
Button, data, ip + yyy session['username'] i co tam jeszcze chcesz. Na koniec czyścić zmienną $log1 = NULL; i tyle

Tak wiem dla programistów którzy już mają o wiele wiekszę doświadczenie jest to tragiczny kod i podejście do problemu, jednak nadal się uczę a w moim przypadku takie rozwiązanie problemu zdało egzamin (400 klikających coś na raz nie zamuliło serwera (IMG:style_emoticons/default/smile.gif) )
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Do logów potrzebna jest baza danych umożliwiająca szybki zapis (odczyt nie jest tak istotny) zróżnicowanych, nierelacyjnych danych. Tutaj Apache Casscandra wydaje się być jednym z faworytów.
Relacyjne bazy danych? Też dadzą radę, ale nie będą tak wygodne w użyciu.
Go to the top of the page
+Quote Post
koxu1996
post
Post #13





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Mam taki kod:
  1. <?php
  2. $host="mysql3.ugu.pl"; // Nazwa hosta.
  3. $db_user="*******"; // Nazwa użytkownika - MySQL.
  4. $db_password="*****"; // Hasło do bazy.
  5. $database="******"; // Nazwa bazy.
  6. mysql_connect($host,$db_user,$db_password);
  7. mysql_select_db($database);
  8. ?>
  9. <html>
  10. <head>
  11. <link rel="stylesheet" type="text/css" href="style.css" />
  12. </head>
  13. <body>
  14.  
  15.  
  16.  
  17.  
  18. <div id="pasek"><table><tr>
  19. <td class="form_input_login">
  20. <input type="text" name="login" class="login" value="Login" size="15" onfocus="if(!this._haschanged){this.value=''};this._haschanged=true;"></td><td class="form_input_login">
  21. <input type="password" name="password" class="login" value="Hasło" size="15" onfocus="if(!this._haschanged){this.value=''};this._haschanged=true;""></td></tr></table>
  22.  
  23. </div>
  24.  
  25.  
  26. <br><br>
  27. <div class="timenormal" id='time'></div>
  28. <button onclick="clickbutton()" type=button>KLIK</button>
  29.  
  30.  
  31.  
  32. </body>
  33. </html>
  34.  
  35. <script type="text/javascript">
  36.  
  37.  
  38.  
  39.  
  40.  
  41. function zmien_klase_CSS(nazwa_nowej_klasy, element) {
  42. var el = document.getElementById(element);
  43. el.className = nazwa_nowej_klasy;
  44. }
  45.  
  46.  
  47.  
  48. function czasDoWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda)
  49. {
  50. var check=0;
  51. var aktualnyCzas = new Date();
  52. var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda);
  53. var pozostalyCzas = dataWydarzenia.getTime() - aktualnyCzas.getTime();
  54.  
  55. if (pozostalyCzas > 0)
  56. {
  57. if (check==0)
  58. {
  59. if (pozostalyCzas <= 10000)
  60. {
  61. zmien_klase_CSS(timehurry, time);
  62. check=1;
  63. }
  64. }
  65.  
  66. var s = pozostalyCzas / 1000; // sekundy
  67. var min = s / 60; // minuty
  68. var h = min / 60; // godziny
  69.  
  70. var sLeft = Math.floor(s % 60); // pozostało sekund
  71. var minLeft = Math.floor(min % 60); // pozostało minut
  72. var hLeft = Math.floor(h); // pozostało godzin
  73.  
  74. if (minLeft < 10)
  75. minLeft = "0" + minLeft;
  76. if (sLeft < 10)
  77. sLeft = "0" + sLeft;
  78.  
  79. return hLeft + " : " + minLeft + " : " + sLeft;
  80. }
  81. else
  82. {
  83. return "Zakończone";
  84. }
  85.  
  86. }
  87.  
  88. window.onload = function()
  89. {
  90. idElement = "time";
  91. document.getElementById(idElement).innerHTML = czasDoWydarzenia(2012, 06, 19, 15, 46, 0, 0);
  92. setInterval("document.getElementById(idElement).innerHTML = czasDoWydarzenia(2012, 06, 19, 15, 46, 0, 0)", 1000);
  93. };
  94.  
  95.  
  96.  
  97.  
  98.  
  99. function clickbutton()
  100. {
  101. <?php
  102. $zapytanie_add_user = "INSERT INTO `users` values(NULL, '"."xxxx"."', '"."yyy"."', '"."zzzzzz"."', '"."dddd"."')";
  103.  
  104. // Odpowiedz
  105. $odpowiedz = mysql_query($zapytanie_add_user);
  106. if($odpowiedz > 0){
  107. echo 'Log zaapisany';
  108. }
  109. else{
  110. $pokaz_form=false;
  111. echo 'Problem z MySQL.';
  112. }
  113. ?>
  114. }
  115. </script>
  116. <?php
  117. mysql_close($database);
  118. ?>

Jednak kliknięcie nie dodaje w ogóle rekordów do bazy. Co zrobiłem nie tak?

Ten post edytował koxu1996 18.07.2012, 13:05:49
Go to the top of the page
+Quote Post
Crozin
post
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przede wszystkim nie rozumiesz różnicy pomiędzy kodem wykonywanym po stronie serwera i po stronie klienta (przeglądarki) - https://www.google.com/search?sugexp=chrome...+vs+client-side
Go to the top of the page
+Quote Post
koxu1996
post
Post #15





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Chodzi ci może o to że dodawanie rekordu jest po stronie klienta a nie serwera? Jakbym chciał zrobić po stronie serwera to wystarczył by submit i w pliku sprawdzenie czy został wciśnięty przycisk. Tylko wtedy strona by się przeładowywała. A mi chodzi o to żeby zapisywać i wyświetlać logi w czasie rzeczywistym, co podobno da się w js. Jednak javascript nie obsługuje łączenia z bazą danych mysql. To jak u licha mam to zrobić na bazach żeby działało w czasie rzeczywistym?
Go to the top of the page
+Quote Post
markonix
post
Post #16





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Ajax to właśnie pomost pomiędzy JS a PHP.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 16:10