[ stomic_50 @ 11.04.2005. 14:42 ] @
interesuje me nesto poput pretrage auta na mobile.de

znaci da mi select vrati informacije na osnovu promjenjivih koje sam unio.

npr. imam proizvodjaca, godiste, boju, cijenu

imam problema da prikazem recimo sva auta marke bmw crne boje.

meni u tom slucaju daje sve bmw-ove i sva auta crne boje nebitno da li je bmw ili nesto drugo...

malo sam se izgubio sa AND-om i OR-om tako da mi prikazuje vise nego sto bi trebalo ili nista.

kako odraditi select iskaz da mi prikaze ono sto je korisnik izabrao, a da pri tome ne mora ispuniti sva polja vec moze da izabere jedno, dva ili vise kriterijuma. bas kao mobile.de

[ boccio @ 11.04.2005. 15:37 ] @
Najlakse ti je da prvo kreiras "prazan" query gde ces samo da uvedes WHERE klauzu koja uvek vraca TRUE. Onda samo dodajes jedan po jedan zahtev shodno inputu korisnika.
Primera radi:
Code:

$query = "Select * FROM tblAutomobili WHERE 1=1";
// sad dodajes prave parametre
if (isset($_POST['boja']))
     $query .= "AND boja = '$_POST['boja']'";
if (isset($_POST['marka']))
     $query .= "AND marka = '$_POST['marka']'";
// i tako do besvesti

Ovo je uproscen primer, obzirom da se koristi samo jedna tabela. U realnosti ces sigurno imati vise relacionih tabela, makar zbog normalizacije baze, pa onda dodatne provere POST parametara pre uvodjenja u query (stripslashes, etc) zbog SQL Injection prevencije. Ali princip je isti, osim sto ces dodavati verovatno i JOIN-e, a onda i GROUP BY i sl...
[ stomic_50 @ 12.04.2005. 08:20 ] @
ok zvuci vrlo jednostavno.
ali sad mi se pojavljuje sledeci problem.
kod koji si napisao ne radi, tj. javlja greske, a kada ga napisem na ovaj dole nacin onda radi ali nikada ne daje nikakve rezultate iako prethodno ispise promjenjive sa print $_POST['marka']; , sto znaci da su promjenjive ok.


Code:
print $_POST['marka'];
print $_POST['opis1'];
print $_POST['opis2'];


$result = "select * FROM auta where 1=1";
     
if (isset($_POST['marka']))
     $result .= "AND marka =" .$_POST['marka'];
if (isset($_POST['opis1']))
     $result .= "AND opis1 =" .$_POST['opis1'];
if (isset($_POST['opis2']))
     $result .= "AND opis2 =" .$_POST['opis2'];


cak i kada stavim samo:

$result = "select * FROM auta where marka = $marka";
ne radi dok ne stavim mysql_query
mysql_query($result = "select * FROM auta where marka = $marka");

gdje grijesim?

ostatak koda ide ovako i on radi ok
Code:
while ($story = mysql_fetch_array($result)) 
{
 

 
  print '<tr><td width="60">';
   print '<font size="2">';
  print $story['marka'];
  print '</font>';
[ boccio @ 12.04.2005. 09:05 ] @
Piece of advice: kad ti query ne radi, ti ga lepo echo-ujes pa vidis sta ne valja. Ovako napamet nikad neces naci gresku, zar ne?

U ovom primeru, evo sta mi je odmah zapelo za oko:
Code:

$result = "select * FROM auta where 1=1";
     
if (isset($_POST['marka']))
     $result .= "AND marka =" .$_POST['marka'];

Vidis, kad spojis ova dva stringa, ako se ne varam dobijes ovo: (predpostavka da je $_POST['marka'] = 'bmw')
Code:

select * FROM auta where 1=1AND marka =bmw

Da li vidis gde je greska? OK, jeste, ja sam to napisao, a ti si samo cut'n'pasteovao, ali ipak...pogledas malo i sam sta se desava...
[ stomic_50 @ 12.04.2005. 11:58 ] @
kasnije sam primjetio i to ali nije do toga. obradovao sam se kad sam vidio ali i dalje ne radi. :(
probao sam sve zivo, ne samo cut'n'paste, ali netje
[ broker @ 12.04.2005. 12:09 ] @
Posto ti ovaj savet..

Citat:

Piece of advice: kad ti query ne radi, ti ga lepo echo-ujes pa vidis sta ne valja.


...nije bio dovoljan evo ti jos nekih:

Kada echoujes generisani SQL upit, onda ka iskopiraj i prebaci u neki SQL alat povezan na tvoju bazu i probaj tamo da ga izvrsis. Alat ce ti dati neki koliko-toliko smislen opis greske koji ce ti pomoci da utvrdis sta je problem. Uz to je preporucljivo da poznajes SQL sintaksu.

Sigurno neces resiti problem tako sto ces ovde da ponavljas da ti kod ne radi. Niko ovde nije vidovit pa da pogadja zbog cega to tebi ne radi.

Nekada pomaze i da ceo kod napises ponovo. Neke sitne sintaksne greske umeju da budu tako neuocljive da se izgube sati u potrazi.

S druge strane, covek ti je rekao sve sto ti treba, i cak ti dao primer (koji ne mora da radi da bi bilo jasno kako treba da radis), pa zapni malo i uradi to sam.

To sto tebe mucije banalnost i ja recimomogu da nagadjam da je stvar u navodnicima. Takve probleme moras sam da resavas.
[ stomic_50 @ 12.04.2005. 12:38 ] @
rijesio sam problem

svo to sto ste rekli ste upravu i to i radim. znaci sa echo i sa sql alatkama kao mysql front npr.
jos mi samo fali alex da kaze "procitaj dokumentaciju" pa da kompletiramo instrukcije. :)

problem nije bio u tackicama, zarezima i ostalim glupostima jer sam kod prekucao 16 puta. sve dok na kraju nisam dodao :

$result = mysql_query($result);

sada radi.

hvala boccio