Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie, czy warunek jest poprawnie napisany
Forum PHP.pl > Forum > PHP
Darek M.
Witam po dłuższej przerwie,

słowem wstępu, tworzę funkcjonalność, która pozwoli na tworzenie filtrów do pewnej z tablicy - takich filtrów mogę mieć do 10 sztuk, każdy jest obiektem przechowującym 3 wartości - nazwa pola, operator oraz wartość porównywana: w końcowej fazie będzie to zamieniane na część zapytania WHERE: "NazwaPola__c < 100". Obecnie każdy z tych filtrów jest łączony za pomocą "AND", tak więc posiadając takie filtry:

1. Koszt < 100
2. Nazwa LIKE '%Test'

otrzymam wszystkie, które mają w nazwie Test i ich koszt jest mniejszy niż 100. Po dodaniu trzeciego filtra:

3. Koszt > 150

nie będę miał żadnego rekordu, bo nie możliwe, aby Koszt był zarówno mniejszy od 100 i większy od 150 - i tu dochodzimy do sedna. Użytkownik mam mieć możliwość dostosowania filtrów w taki sposób, że może w odpowiednim polu wpisać coś w stylu:

"(1 AND 2) OR 3"

wtedy, zapytanie ma być zbudowane według tego wzorca i za 1, 2 oraz 3 wstawić odpowiednio filtry - to już mam obcykane. Problemem jest walidacja tej logiki: w jaki sposób mogę sprawdzić, czy aby na pewno użytkownik wpisał poprawnie warunek (tj. liczba nawiasów się zgadza) oraz mam pewność, że nie ma czegoś takiego jak "1 AND OR 2" czy "1 AND ()". Liczbę nawiasów obecnie waliduję w taki sposób, że zliczam od lewej liczbę nawiasów otwierających oraz zamykających - jeśli zamykających w trakcie przechodzenia od lewej mam więcej niż otwierających, lub otwierających na zakończenie jest więcej niż zamykających, jednak nie wiem, co zrobić z samą logiką.

Dziękuję za wszelkie rady, pozdrawiam.
Pyton_000
Pytanie jak to jest budowane?
Darek M.
Z takiego wzorca:

"(1 AND 2) OR 3"

i filtrów jak powyżej powinno ułożyć:

  1. ... WHERE (Koszt < 100 AND Nazwa LIKE '%Test') OR Koszt > 150


ale rozchodzi się tylko i wyłącznie o walidację tego warunku, a nie to, jak będzie zbudowany później.
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.