W naszej bieżącej aplikacji Mam raport, który zawiera coś takiego:Jak mogę zapisać warunkową stację PHP w bazie danych do późniejszego wykorzystania?
if($foo == 3 || $bar > 3) {
$e = someFunction();
};
ale dla innego klienta, że samo wyrażenie może być:
if($foo == 3 || $bar == 5 && $foobar != 9) {
$e = someFunction();
};
Czy istnieje prosta droga do zapamiętywania dwa różne wyrażenia, tylko
$foo == 3 || $bar > 3 OR $foo == 3 || $bar == 5
bity w bazie danych (MySQL), więc nie trzeba ciężko kodem wszystkich tych zasad przez klienta lub utrzymywać wersje klienta tego samego raportu. Próbuję dowiedzieć się, czy mogę ustawić zmienną o zastąpić warunki. Coś takiego:
$conditions = $row_rsConditions['condition_row'] //Get $foo == 3 || $bar > 3 from the DB and store it as $conditions
if($conditions) {
$e = someFunction();
};
Może być> 100 różnych klientów, a każdy klient może/miałby inny zestaw wyrażeń. Po prostu nie jestem pewien/najlepszego sposobu na zrobienie tego.
UPDATE:
myślę zrozumieć problemy z wykorzystaniem PHP funkcji eval(). Ale ze względu na liczbę możliwych kombinacji pochylam się, aby użyć DB do przechowywania warunków (nie jestem pewien, czy jeszcze użyć eval()).
Czy to ma znaczenie (bezpieczniejsze), jeśli nie ma interfejsu użytkownika zapisuje do pola warunków/tabeli? To może być coś, na co sami sobie poradzimy.
Co powiesz na zapisanie kodu do bazy danych, a później załadowanie i wykonanie za pomocą 'eval' ? Możliwe, że pojawią się problemy z bezpieczeństwem, gdy ktoś wstrzyknie bazę danych i zmusi cię do oceny swojego kodu. – Nobody
Następnie pojawia się pytanie, w jakich okolicznościach operatorzy w warunkach mogą się zmienić? – Deele
Myślę, że to bardzo zły projekt do przechowywania logiki w bazie danych, baza danych powinna być używana tylko dla danych – Fivell