Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć

[es] :: MySQL :: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć

[ Pregleda: 1825 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ovomojela

Član broj: 198977
Poruke: 58
62.193.159.*



Profil

icon Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć28.08.2009. u 12:47 - pre 178 meseci
Ovako, celu noć sam se mučio sa ovim problemom, ne bi me na kraju čudilo da je problem bio u nekim znacima navodnika i sl. mada sam i to probao.

Imam Wamp 2.0, bazu sa imenom i prezimenom i godinom te osobe. Problem je u pretrazi.

U pretraga.html imam sledeći kod (neću ceo pisati, uglavnom poziva se pretraga.php):

<B>ime:</B><br><input name="ime" type="text" id="textfield" size="15" /><br>
<B>prezime:</B><br><input name="prezime" type="text" id="textfield" size="15" /><br>

U pretraga.php imam pored ostalog

...
$var1 = @$_GET['ime'] ;
$trimmed1 = trim($var1);
$var2 = @$_GET['prezime'] ;
$trimmed2 = trim($var2);
....
$query = "select * from osoba where ime like \"%$trimmed1%\" and prezime like \"%$trimmed2%\" order by naziv";
....

TO SAD SVE LEPO RADI!

Međutim, kada hoću da dodam pretragu po godini sa uslovom da traži osobe sa broj godina većim od npr. 30 tu je problem.

U tom slučaju pretraga.html izgleda ovako:

<B>ime:</B><br><input name="ime" type="text" id="textfield" size="15" /><br>
<B>prezime:</B><br><input name="prezime" type="text" id="textfield" size="15" /><br>
<B>Broj godina veći od:</B><br> <input type="text" name="godine"><br>

a pretraga.php izgleda ovako:

...
$var1 = @$_GET['ime'] ;
$trimmed1 = trim($var1);
$var2 = @$_GET['prezime'] ;
$trimmed2 = trim($var2);
$var3 = @$_GET['godine'] ; // ovde sam uzeo vrednost unešenog broja godina iz pretraga.html
$trimmed3 = trim($var3); //nisam siguran koliko mi je potreban ovaj red za sve ovo...
....
$query = "select * from osoba where ime like \"%$trimmed1%\" and prezime like \"%$trimmed2%\" and godine > $var3 order by naziv";
...

Ovako sam ja postavio query i on radi pretragu po godinama bas kako sam zamislio ALI ima neki konflikt i nece onda da radi pretragu po imenu i prezimenu (izbacuje warnings). Probao sam sa zagradama, znacima navodnika, \"%$trimmed3%\" i sl. ali ne vredi.

Zna li neko resenje tj. da mi pretragu vrši bez problema i po imenu i po prezimenu i po godinama koje sam uneo u HTML stranici.
 
Odgovor na temu

Cyberghost
Aleksandar Jovanović
Programer
S U M A D I J A

Član broj: 14674
Poruke: 813
91.150.76.*



+1 Profil

icon Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć28.08.2009. u 13:49 - pre 178 meseci
Citat:
Ovomojela
$query = "select * from osoba where ime like \"%$trimmed1%\" and prezime like \"%$trimmed2%\" and godine > $var3 order by naziv";


Ako je $var3 tipa: int u kodu i u bazi podataka onda je upit na mestu !!!
Mozes da probas sa apostrofima oko $var3 mada tvoja varijanta je ispravna
ja tako koristim.
Uzmu mySQLQuery Browser i tamo testiraj upite, pa kada tamo proradi kako treba
onda idi kroz HTML/PHP.

Srecno

Every program is either trivial or it contains at least one bug.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć28.08.2009. u 15:02 - pre 178 meseci
proveri da li ti je upaljem magic quotes, ako jeste odradi stripslashes za te $_GET() variable.
onda te variable escape-uj sa mysql_real_escape_string() ... za godine, proveri da li je number ili nije, castuj u (int) i onda ce da radi

Code:


$ime= mysql_real_escape_string(trim((get_magic_quotes_gpc()?stripslashes($_GET['ime']),$_GET['ime'])));
$prezime= mysql_real_escape_string(trim((get_magic_quotes_gpc()?stripslashes($_GET['prezime']),$_GET['ime'])));
$godine = (int) (is_numeric($_GET['godine'])?$_GET['godine'], 0) ;


inace, da bi cela tema imala nekakve veze sa mysql-om a ne sa php-om, upit koji koristis (like %xxx%) ce raditi table scan - dakle nece koristiti nikakve indexe i prolazice kroz tabelu jedan po jedan slog i raditi poredjenje. ako vrednost unutar like pocinje sa % - nema indexa .. ako ti je upit like 'xxx%' onda ce u nekom slucaju ako je polje indexirano mysql odluciti da koristi index (mada i tu vrlo cesto ide table scan) tako da - ako mozes da izbegnes like - izbegni
 
Odgovor na temu

Ovomojela

Član broj: 198977
Poruke: 58
62.193.159.*



Profil

icon Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć28.08.2009. u 15:17 - pre 178 meseci
Citat:
Cyberghost: Ako je $var3 tipa: int u kodu i u bazi podataka onda je upit na mestu !!!


Svaka čast. To je bio problem. U bazi godine ($var3) nisu bile postavljene kao INT već kao VARCHAR. Puno hvala, sada sve radi.

Rešeno!
 
Odgovor na temu

Ovomojela

Član broj: 198977
Poruke: 58
62.193.159.*



Profil

icon Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć28.08.2009. u 15:21 - pre 178 meseci
Citat:
bogdan.kecman: ... za godine, proveri da li je number ili nije, castuj u (int) i onda ce da radi
ako mozes da izbegnes like - izbegni


Hvala i tebi i ti si pogodio šta je. Like mi radi posao baš onako kako sam zamislio, ne bih ga za sada menjao. Hvala ljudi još jednom, spasli ste me kidanja živaca.
 
Odgovor na temu

[es] :: MySQL :: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć

[ Pregleda: 1825 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.