Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]logi
kamilo818
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Mym pytanie na temat logow.
Chciałbym aby zapisywały mi się wszystkie działania na bazie danych. Tzn jeśli użytkownik dodał rekord -> log, jeśli usunął -> log, jeśli jakaś operacja się nie powiodła -> log.

Aktualnie robię to tak ze w funkcji która wykonuje operacje na bazie mysql mam kolejna funkcje addLog() która w zależności od tego czy operacja zwróciła false czy true dodaje odpowiedni rekord do bazy.
Dodawana tam są informacje : kto, kiedy, do jakiej tabeli, jaka akcja ( dodanie, usunięcie ), wartość na jaka miała być zmieniona.

W sumie działa to jak oczekuje. Ale może jest jakaś wbudowana funkcja mysql czy php która dzięki której lepiej można gromadzić logi. Albo czy można jakoś to lepiej napisać ? W sensie czy moje podejście do tematu nie jest błędne .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rad11
post
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


Stworz sobie tabele:
  1. CREATE TABLE IF NOT EXISTS `logs` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `user_id` smallint(5) unsigned NOT NULL,
  4. `object` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'nazwa tabeli',
  5. `object_field` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  6. `object_id` int(10) unsigned NOT NULL COMMENT 'id rekordu',
  7. `new_value` mediumtext COLLATE utf8_unicode_ci,
  8. `old_value` mediumtext COLLATE utf8_unicode_ci,
  9. `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  10. PRIMARY KEY (`id`),
  11. KEY `object` (`object`,`object_field`,`object_id`,`date`,`user_id`),
  12. KEY `user_id` (`user_id`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


potem uruchom wyzwalacz w phpmyadmin np:
  1. DROP TRIGGER IF EXISTS `NAZWA_WYZWALACZA`;
  2. SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
  3. DELIMITER //
  4. CREATE TRIGGER `NAZWA_WYZWALACZA` AFTER UPDATE ON `NAZWA_SLEDZONEJ_TABELI` FOR EACH ROW BEGIN
  5.  
  6. IF (@user_id IS NULL ) THEN
  7. SET @user_id=0;
  8. END IF;
  9.  
  10. IF OLD.NAZWA_SLEDZONEGO_POLA1<> NEW.NAZWA_SLEDZONEGO_POLA1 THEN
  11. INSERT INTO logs (user_id,object,object_field,object_id,new_value,old_value,date) VALUES (@user_id,'rounds_country','name',OLD.id,NEW.name,OLD.name,NOW()); -- DEFINICJA CO ZAPISUJESZ W TABELI DZIENNIKA
  12. END IF;
  13.  
  14. END//
  15. DELIMITER ;
  16. SET SQL_MODE=@OLDTMP_SQL_MODE;

a to linijke:

  1. set @user_id = TUTAJ NUMER ID USERA


ustawiaj w przed miejscem w ktorym robisz update, insert itd.

Ten post edytował rad11 1.02.2015, 20:22:37
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 14:11