Diskuze: Jak ošetřit vstup při použití LIKE v dotazu pro databázi
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, řešení je jednoduché
Db::queryAll('SELECT * FROM uzivatele WHERE vek = ?', "%{$vek}%");
Případně s apostrofy
Db::queryAll('SELECT * FROM uzivatele WHERE vek = ?', '%' . $vek . '%");
Jen tak btw, na co potřebuješ v databázi ukládat věk uživatele, který se každoročně mění? Není lepší si uložit datum narození a věk z toho spočítat?
Jo, to by určitě bylo lepší, ale tohle je jen příklad, ve skutečnosti
v tý databázi pro kterou to potřebuju nemám věk, ale něco jiného... Tohle
mě jen tak rychle napadlo abych to tady mohl vysvětlit
Ok, v pořádku, jen mě to tak napadlo
Jeste bych mozna v php odmazal nadbytecne % a * ze zacatku a konce. Uzivatele obcas nevi, jak rici, ze chteji pouzit like, nevidi dovnitr programu.
Co přesně myslíš? Jako, že nemám používat LIKE pokud jde o vstup od uživatele? Nechápu...
V sql query davas:
... sloupec LIKE '%slovo%'
No, a ted jsou uzivatele, co zkousi pridat * nebo % do inputu, napr
<input value="%slovo"> nebo <input value="*slovo">
... sloupec LIKE '%%slovo%' | ... sloupec LIKE '%*slovo%'
Oni nevidi php kod, tak nevi, ze tam s like pracujes.
Cili, mozna (zalezi na datech), bych z te promenne mazal ze zacatku a z konce
znaky * a %. Neco jako dela php trim() pro mezery.
Je to zbytecnost navic, ale muze se to obcas hodit.
Jasně, to je dobrý point
Sloupec ve kterém se bude hledat by tyto znaky stejně obsahovat asi neměl,
takže to není problém mazat
Nicméně asi i upozorním uživatele, že jsou tyto znaky
zakázané, pokud se je tam pokusí hodit.
Zobrazeno 10 zpráv z 10.