Jak sprawdzić czy 4 ostatnie litery ciągu nie mają określonych znaków

Odpowiedz Nowy wątek
2018-02-02 15:57
0

Mam taki pytanie czy jest jakaś funkcja, która sprawdza czy 5 ostatnich liter ciągu nie mają w sobie znaków takich jak " and " czy " or " ?

Co próbujesz zrobić? - Patryk27 2018-02-02 16:39

Pozostało 580 znaków

2018-02-02 16:44
0

Bo mam sobie formularz, i tam są pola tekstowe do wypełnienia oczywiście można wypełnić wszystkie, a można żadnego nie wypełniać i teraz jak ktoś wpisze w dane pole jaką wartość to w zapytaniu tworzy się wartość

$zapytanie .= " pole1 < wartosc"
$zapytanie .= " and pole2 < wartosc"

I teraz przykładowo jak użytkownik nie będzie wypełniał pola 1 to zmienna zapytanie będzie miała taką wartość select pole from tabela where and pole2 > wartosc i teraz mi chodzi o usunięcie tych zbędnych and i or.

Wydaje mi się, czy takie składanie zapytań trochę śmierdzi? + http://us.php.net/manual/en/function.substr.php - Saalin 2018-02-02 17:43

Pozostało 580 znaków

2018-02-02 18:12
1

Korzystaj z PDO i prepared statements. Teraz tylko prosisz się o SQL injection. Dlaczego 5 ostatnich liter? a jak ktoś CI poda 5 OR 10; SELECT * FROM users jak parametr. Poszerzaj horyzont, gdy spotykasz się z jakimś problemem.

Ja używam laravela a onma wbudowany mechanizm przed sql injection - pol90 2018-02-02 18:14
Ma też wbudowanego QueryBuildera - https://laravel.com/docs/5.5/queries - axelbest 2018-02-02 18:15
Jutro się tym zajmę. - pol90 2018-02-02 18:17
Btw. jeśli składasz zapytania tak jak napisałeś - to żaden mechanizm laravela Cię nie uratuje. - axelbest 2018-02-02 18:18

Pozostało 580 znaków

2018-02-02 18:13
0

Czyli problem X/Y: powinieneś wykorzystać odpowiedni query builder, a nie ręcznie składać zapytania.


Pozostało 580 znaków

2018-02-02 18:24

Jeśli nie korzystasz z Query Builder w Laravel to jakbyś rezygnował z ochrony przed SQL Injection.
Popatrz w dokumentacje:
https://laravel.com/docs/5.5/queries#selects
Możesz sorbie zrobić coś takiego:

$query = DB::table('users')->select('name');
if(Input::has('nextFilter')){
     $query->addSelect('nextFilter');
}
$result = $query->get();
edytowany 2x, ostatnio: jurek1980, 2018-02-02 18:25
Jutro pomyśle czyli jak używam zwykłych metod DB::select(zapytanie) to jestem narażony na ataki sql ? - pol90 2018-02-02 18:27
Nie, bo to jest też Query Builder. No i po co wtedy chcesz sprawdzać jakieś ostatnie znaki? Formularz walidujesz wcześniej poprzez Validator i tam ustawisz opcje. Spróbuj sobie przepuścić wartość z podejrzanego pola jako kawałek SQLa. Wykona się? - jurek1980 2018-02-02 18:30
Raczej się nie wykona. - pol90 2018-02-02 18:44
A czy można jakoś przez Buildera przekazywać przez metodę where funkcje sql np. month ? - pol90 2018-02-03 09:50
Wtedy korzystasz dla takiego kawałka zapytania z DB::raw : https://laravel.com/docs/5.5/queries#raw-expressions Pokaż najlepiej w następnym poście to zapytanie to coś się wymyśli. - jurek1980 2018-02-03 12:06

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0