Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Logi z bazy danych - lista aktualizacji
Forum PHP.pl > Forum > Przedszkole
boro11
Witam, postanowiłem dodać do mojej strony "log" z operacji na bazie danych, a raczej jeden z jej tabel. Jak mogę sporządzić log który wyświetli mi zmiany w bazie danych.

np.
Jest rekord "test" i w jednym z jego pol jest wartość "coś"
Zmieniam zawartość pola "coś" na "ktoś"
A skrypt powinien wyświetlać zmianę na stronie:
test -> ktoś

Oczywiście forma jest dowolna ale myślę że przykłada jest zrozumiały. Zna ktoś jakąś funkcję/skrypt który mógł by coś takiego zrobić?
mat-bi
Tworzysz własne funkcje do bazy danych i tam logujesz?
boro11
Można prosić jaśniej?
Nie wiem czy to było pytanie, czy pytanie retoryczne..
olechafm
do funkcji która edytuje wpisy w bazie, czyli tam gdzie zmieniasz "coś" na "ktoś", dodaj opcje która po zakończonej sukcesem edycji doda również jej potwierdzenie w Twoich logach
boro11
Ale nie zmieniam tego bezpośrednio w bazie, tylko to się samo w połowię zarządza. Po spełnieniu określonych warunków status się zmienia. A zmiana ręczna polega na wyborze jednego statusu z listy rozwijalnej.
olechafm
no ale jakiś kod tym zarządza jednak i w pewnym momencie wykonuje operacje na bazie, samo się nic nie robi, chyba że masz na myśli fakt, że to nie Ty ten kod napisałeś i tak naprawdę nie wiesz jak w nim skutecznie grzebać...

więcej szczegółów, opisz co masz na myśli pisząc, że się "samo w połowie zarządza"... gdy przechwycisz moment w którym status się zmienia (zapisuje do bazy) no to w tym miejscu musisz dopisać kod logujący takie info
boro11
Kodu sam nie pisałem, ale doskonale wiem co się gdzie robi. Bo siedzę w tym skrypcie już długi czas. Półautomatyzm polega na tym że po spełnieniu warunku strona jest przenoszona.

Jeśli dobrze zrozumiałem to Wasza sugestia jest taka żeby utworzyć nową pozycję w bazie danych i dam umieszczać zmiany i wyświetlać ja jak każdą inną rzeczy z bazy danych?
Jeśli nie proszę o poprawę mojego toku rozumowania smile.gif

Zadając pytanie miałem nadzieje że istnieje jakaś funkcja która takie zmiany w bazie śledzi.
olechafm
potrzebujesz funkcji która w czasie rzeczywistym będzie śledzić te zmiany w bazie, a najłatwiej to robić gdy taka zmiana jest realizowana, czyli tam gdzie jest wysyłane zapytanie do bazy danych... w momencie gdy twój skrypt "w sposób półautomatyczny" zdecyduje że Twój status w bazie musi zostać zmieniony, zaczyna realizować kod - nawiązuje połączenie z bazą, buduje zapytanie, i wykonuje to zapytanie, po czym ty możesz nakazać mu dodatkowo sprawdzić, czy to zapytanie wykonało się poprawnie, jeśli tak to robisz loga, pobierasz dane zmiennych - tej z przed zmiany i tą na którą zmieniłeś i zapisujesz je do pliku z logami...
boro11
Pierwsze słyszę o takich funkcjach.

Czy chodzi o to:
http://webmaster.helion.pl/index.php/kursm...ne-i-wyzwalacze
?

Dobra cos znalazłem:

  1. $zap=array(1 => 'UPDATE',2 => $pref.'site',3 => "SET",4 => "link='$link', banner='$banner', na='$na', payout='$payout', czas='$czas',proc='$proct',klik='$click',linkw='$lw', ref='$refklik',status='$status', nazwa='$nazwa',ads='$ads',alert='$alert',linka='$alertl',limits='$limit',lastpayy='$lastpayy',refkow='$refkow',amounts='$amounts'",5 => "WHERE",6 => "id='$id' LIMIT 1");
  2. if($db->zap($zap))


Ten kod wykonuję się po kliknięciu na button w moim panelu adminisracyjnym. Jak mogę do tego zapytania dodać jeszcze INSERT?
mat-bi
Albo możesz użyć triggerów smile.gif
boro11
Dzięki za naprowadzenie smile.gif

Utworzyłem sobie tabele: dziennik z polami id i komunikat i znalazłem taki kod do śledzenia"

  1. DELIMITER //
  2. CREATE TRIGGER tgr_nazwy
  3.  
  4. BEFORE UPDATE ON test_site
  5. FOR STATUS
  6.  
  7. BEGIN
  8.  
  9. IF new.description != old.description
  10.  
  11. OR new.description IS NULL AND old.description IS NOT NULL
  12.  
  13. OR old.description IS NULL AND new.description IS NOT NULL then
  14.  
  15. INSERT INTO dziennik(komunikat)
  16.  
  17. VALUES ( CONCAT('status: ', COALESCE(old.description,'NULL'), ' -> '
  18.  
  19. , COALESCE(new.description,'NULL'))
  20.  
  21. );
  22.  
  23. END IF;
  24. DELIMITER ;



Mam coś takiego, tylko nie do końca wiem gdzie wywołać to zapytanie. Ma śledzić w tabeli "test_site" pole "status" próbowałem wywołać zapytanie w całej bazie i w poszczególnej tabeli ale nic się nie dodaje do dziennika. Nie znalazłem nigdy dobrego omówienia dla tego zapytania powyżej i nie wiem co może być źle.

Może jeszcze ta informacja będzie pomocna:
Wersja serwera: 5.0.91
olechafm
No czasami niestety funkcje trzeba sobie napisać samodzielnie smile.gif nie chodziło mi w tym przypadku o funkcję wbudowaną w PHP.
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.