tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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)