Oznámení
Problem s uvozovkou '
před 10 lety
- palino
- Člen | 4
Caute, mam problem s dotazom. Idem mi hlavne oto, ked sa
$_GET[‚nazov_firmy‘] rovna uvodzovke ( $_GET[‚nazov_firmy‘] = „'“;
)
Dotaz skladam nasledovne:
if(isset($_GET['nazov_firmy']) AND $_GET['nazov_firmy']!=""){
$to_sql ="AND nazov_firmy LIKE '%".mysql_real_escape_string($_GET['nazov_firmy'])."%'";
}
$q = "SELECT *
FROM predavajuci LEFT JOIN krajina USING(id_krajina)
WHERE aktivny ='1'
".$to_sql;
cize mam
SELECT * FROM predavajuci LEFT JOIN krajina USING(id_krajina) WHERE aktivny='1' AND nazov_firmy LIKE '%\'%'
teraz ked zavolam dibi::query($q); tak to padne.
Ked dam dibi::test($q); dostanem
SELECT *
FROM predavajuci
LEFT JOIN krajina USING(id_krajina)
WHERE aktivny ='1'
AND nazov_firmy LIKE '%\\'%**Alone quote**
ale neviem preco mi da Alone quote. Neviete mi niekto poradit?
před 10 lety
- LastHunter
- Člen | 1539
Fuj fuj, co SQL injection?
Každopádně, problém je v escapování. Správná dibi syntaxe pro like je tato:
dibi::query("SELECT * FROM table WHERE column LIKE %s", "%" . $value . "%", " ORDER BY ...");
Jak to spojit v tom tvém případě (kde to nemáš zrovna ideálně navržené :)) nevím, asi bych tu situaci rozdělil podle té podmínky a v obou větvích měl rozdílný dibi::query…
před 10 lety
- palino
- Člen | 4
ano, takto mi to funguje, len uz mam napisany projekt a bolo by vela
prerabania, keby som to musel v kazdom filtry menit. Kazdopadne to budem musiet
prerobit, ale by ma zaujimalo preco to robi.
Uvediem este jeden priklad:
$to_sql='';
if(isset($_GET['nazov_firmy']) AND $_GET['nazov_firmy']!=""){$to_sql ="AND nazov_firmy LIKE '".mysql_escape_string('%'.$_GET['nazov_firmy'].'%'); }
dibi::query("
SELECT * FROM
[predavajuci]
WHERE
aktivny='1'
%sql",$to_sql,"
");
aj toto padne, i ked tam pride $to_sql, ktoreho by sa uz nemalo dibi ani dotknut a vobec nerozumiem preco tam nieco doplni.
Editoval palino (16. 6. 2009 8:36)
před 10 lety
- romansklenar
- Člen | 657
palino napsal(a):
… Kazdopadne to budem musiet prerobit …
To každopádně, protože ten kód je fakt humáč :D …bez urážky, ale takhle napsanou aplikaci bych teda po nikom přebírat nechtěl… přitom ono to nedá ani moc práce to aspoň trošku kultivovaně zformátovat při psaní, ale lidi to přesto nedělaj.
před 10 lety
- LastHunter
- Člen | 1539
romansklenar napsal(a):
palino napsal(a):
… Kazdopadne to budem musiet prerobit …
To každopádně, protože ten kód je fakt humáč :D …bez urážky, ale takhle napsanou aplikaci bych teda po nikom přebírat nechtěl… přitom ono to nedá ani moc práce to aspoň trošku kultivovaně zformátovat při psaní, ale lidi to přesto nedělaj.
Pro palina: Co třeba se mrknout na Nette? :)
před 10 lety
- palino
- Člen | 4
LastHunter napsal(a):
romansklenar napsal(a):
palino napsal(a):
… Kazdopadne to budem musiet prerobit …
To každopádně, protože ten kód je fakt humáč :D …bez urážky, ale takhle napsanou aplikaci bych teda po nikom přebírat nechtěl… přitom ono to nedá ani moc práce to aspoň trošku kultivovaně zformátovat při psaní, ale lidi to přesto nedělaj.
Pro palina: Co třeba se mrknout na Nette? :)
Je pravda, ze je to zle napisane, sak vsetci sa ucime, len som chcel vediet preco to robi.
Nette si uz pomaly pozeram ale pre zaciatok je to dost huste.
před 10 lety
- Jod
- Člen | 703
Za takychto ludi furt nadavam v praci..zomg $&!!!@#!@#^%&
!!!
Staci ked ten select prepises jeden nie? To neni tak vela roboty. Skor menej,
nez hladat problem, kedze select sam o sebe je problem.
před 10 lety
- LastHunter
- Člen | 1539
Jod napsal(a):
Za takychto ludi furt nadavam v praci..zomg $&!!!@#!@#^%& !!!
Staci ked ten select prepises jeden nie? To neni tak vela roboty. Skor menej, nez hladat problem, kedze select sam o sebe je problem.
No asi nemá svoji aplikaci napsanou ve stylu DRY :)
před 10 lety
- dodik
- Člen | 10
Jod napsal(a):
Za takychto ludi furt nadavam v praci..zomg $&!!!@#!@#^%& !!!
Staci ked ten select prepises jeden nie? To neni tak vela roboty. Skor menej, nez hladat problem, kedze select sam o sebe je problem.
hej to sql nieje dobre napisane, ale on sa pytal preco to spravi aj pri zadani %sql – mysql_real_escape_string ked je jasne na stranke dibiphp.com napisane, ze %sql – „SQL – řetězec ponechá beze změny“
a aj mna by zaujimalo preco ked dam do %sql uvodzovku tak ju necha tak a ked tam pride \ tak ho osetri
ja v praci nadavam na takychto ludi, nic si mu nepomohol len mudrujes.
btw: ako vies, ze mu staci ten select prepisat jeden?! vestec? mozno :)
Editoval dodik (26. 6. 2009 14:09)
před 10 lety
- Ola
- Člen | 389
A co to vyřešit přes %if?
<?php
$nazev = isset($_GET['nazov_firmy']) ? $_GET['nazov_firmy'] : FALSE;
dibi::query("
SELECT * FROM [predavajuci]
LEFT JOIN [krajina] USING([id_krajina])
WHERE [aktivny]='1' %if", $nazev, "AND [nazov_firmy] LIKE %s", '%' . $nazev . '%');
?>
možná tam budou chybky (psáno z hlavy, bez testu)…
Editoval Ola (26. 6. 2009 17:37)