Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Diskuze: Jak ošetřit vstup při použití LIKE v dotazu pro databázi

PHP PHP Jak ošetřit vstup při použití LIKE v dotazu pro databázi American English version English version

Aktivity (1)
Avatar
jakubho
Člen
Avatar
jakubho:26. května 23:23

Zdravím :-)

Používám zdejší wrapper z tutoriálů, a vím, že když mám nějaký vstup od uživatele, tak do dotazu v SQL hodím otazník a za dotaz pak až dám proměnou, např. takto:

Db::queryAll('SELECT * FROM uzivatele WHERE vek = ?', $vek);

Otázka je, co mám dělat, když mám něco jako toto:

SELECT * FROM `works` WHERE `name` LIKE '%nějakýtext%'

No a "nějakýtext" je uživatelův vstup, tedy bych to chtěl stejným způsobem ošetřit tak, že tam dám otazník a pak za query příslušnou proměnou. Problém je v tom, že '%nějakýtext%' je uvnitř apostrofů a pokud udělám '%?%' tak to nepočítá otazník jako zástupný symbol, ale prostě to vyjede tu query s tím otazníkem...

Děkuji :-)

Odpovědět 26. května 23:23
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Martin Konečný (pavelco1998):26. května 23:42

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 . '%");
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +3 26. května 23:42
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
jakubho
Člen
Avatar
Nahoru Odpovědět 27. května 11:08
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Martin Konečný (pavelco1998):27. května 13:57

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?

Nahoru Odpovědět  +2 27. května 13:57
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
jakubho
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
jakubho:28. května 10:03

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 ;-)

Nahoru Odpovědět 28. května 10:03
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Martin Konečný (pavelco1998):28. května 13:34

Ok, v pořádku, jen mě to tak napadlo :)

Nahoru Odpovědět 28. května 13:34
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28. května 16:13

Jeste bych mozna v php odmazal nadbytecne % a * ze zacatku a konce. Uzivatele obcas nevi, jak rici, ze chteji pouzit like, nevidi dovnitr programu.

 
Nahoru Odpovědět 28. května 16:13
Avatar
jakubho
Člen
Avatar
Odpovídá na Peter Mlich
jakubho:29. května 10:39

Co přesně myslíš? Jako, že nemám používat LIKE pokud jde o vstup od uživatele? Nechápu...

Nahoru Odpovědět 29. května 10:39
Chyba-Jediná jistota v životě programátora.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29. května 13:56

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.

 
Nahoru Odpovědět  +1 29. května 13:56
Avatar
jakubho
Člen
Avatar
Odpovídá na Peter Mlich
jakubho:29. května 19:35

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.

Nahoru Odpovědět 29. května 19:35
Chyba-Jediná jistota v životě programátora.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.