Pereiti prie turinio

PHP MySQL paieškos kūrimas


Rekomenduojami pranešimai

Sveiki,

 

gal galit patart, kaip įvykdyti paiešką ant PHP naudojant MySQL duomenų bazės lenteles?

 

Paieškos kriterijai pasirenkami iš drop-down (select option) tagų:

- Detalės kategorija

- Detalės pavadinimas

- Automobilio markė

- Automobilio modelis

 

Esmė tame, kad yra dalių, kurios gali būti nepriskirtos prie jokių automobilių.

 

Kodą bandžiau rašyti tokį:

$var1 = @$_GET['kategorija'];
$var2 = @$_GET['pavadinimas'];
$var3 = @$_GET['marke'];
$var4 = @$_GET['modelis'];

$db = dbquery("	SELECT * FROM ".$db_prefix."dalys 
			WHERE	dalies_kategorija LIKE '$var1' 
				AND	dalies_pavadinimas LIKE '$var2' 
				AND	dalies_marke LIKE '$var3' 
				OR 	dalies_modelis LIKE '$var4'
			ORDER BY dalies_pavadinimas");

tačiau veikia ne taip kaip norėčiau...

 

Padėkit padaryti:

- jeigu pasirenkame kategoriją ir pavadinimą, būtų atvaizduojami visi duomenys iš db, kurie atitinka šiuos kriterijus, tačiau neimtų markės ir modelio.

- jeigu pasirenkame kategoriją, pavadinimą ir markę, tai kad neimtų modelio.

 

kaip čia su tais LIKE OR/AND padaryt viską?.. ar naudoti kažką kito? :/

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kelios skirtingos užklausos ir if/else, manau. Jei pasirenki vienus, nededi kitų.

if (!empty($var1) && !empty($var2)) { // jei netuscia nei kategorija, nei pavadinimas

   // SELECT * FROM dalys WHERE dalies_kategorija LIKE $var1 AND dalies_pavadinimas LIKE $var2
}

ir t.t. :) Arba galiausiai su javaskriptu panaikink tuos laukelius pagal vartotojo pasirinkimus. Kas nebandys hakint, tas ir neves jų...

 

 

Ir apsisaugok nuo sql injekcijos :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Reikia truputį tobulinti aloritmą:

 

$var1 = @mysql_real_escape_string($_GET['kategorija']);
$var2 = @mysql_real_escape_string($_GET['pavadinimas']);
$var3 = @mysql_real_escape_string($_GET['marke']);
$var4 = @mysql_real_escape_string($_GET['modelis']);

$where = array();

if ($var1)
 $where[] = "dalies_kategorija LIKE '$var1'";

if ($var2)
 $where[] = "dalies_pavadinimas LIKE '$var2'";

if ($var3)
 $where[] = "dalies_marke LIKE '$var3'";

$where = join(" OR ", $where);

if ($var4)
 $where .= " OR dalies_modelis LIKE '$var4'";



$db = dbquery(" SELECT * FROM ".$db_prefix."dalys 
                               WHERE   $where     
                               ORDER BY dalies_pavadinimas");

Redagavo neworld
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, kadangi pavadinimas ir kategorija kaip suprantu visada yra, o marke arba modelis ne, tai sprendimas butu toks:

 

$query = "SELECT * FROM dalys WHERE dalies_kategorija LIKE '$var1' AND dalies_pavadinimas LIKE '$var2'";
if ($var3)
  $query .= " AND dalies_marke LIKE '$var3'";
else if ($var4)
  $query .= " AND dalies_modelis LIKE '$var4'";

$db = dbquery($query);

 

Be to, matau nelabai supranti dar kaip veikia AND ir OR. Paprasciausia i juos ziureti kaip i daugyba (AND) ir suma (OR). Tada aiskiau (bent man) tampa, kokiu eiliskumu logine operacija vykdoma. Jei reikia, i pagalba pasikvieti skliaustus ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...