Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

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

  • 4 odgovora
  • 2.584 pregleda

Najnovija ↓

Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć 28.08.2009. u 13:47 · pre 209 meseci #1
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.
Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć 28.08.2009. u 14:49 · pre 209 meseci #2
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
Potpis
Every program is either trivial or it contains at least one bug.
Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć 28.08.2009. u 16:02 · pre 209 meseci #3
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Početnički problem sa sql-om koji mi je oduzeo čitavo veče - pomoć 28.08.2009. u 16:21 · pre 209 meseci #5
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme