Topic: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Sveiki,

Yra poreikis padaryti duomenu isvedima is mysql i php su html checkbox'u pagalba. Turbut daug kam pasitaikes atvejis, kai uzdedi viena ar keleta varneliu ir paspaudus search gauni filtruota rezultata is db.

Gal kas turi kokiu efektyviai veikianciu ideju? Kas butu paprasciausia ir efektyviausia?


Checkbox'o reiksme paimu su $_POST ir tada per SQL SELECT WHERE stulpelis = POST atrenku rezultatus.

Bet, jeigu nepazymiu nei vieno checkbox'o tuomet man jokiu rezultatu neismeta visai. O kaip padaryti kad jeigu nepazymeta nei viena varna tai ismestu absoliuciai visus variantus (kitaip tariant tas filtravimas neveiktu)?

Paprastas sprendimas eiti per if'us bet kai poto tokiu checkbox'o grupiu atsiranda daugiau tai tu if'u ir ju kombinaciju pasidaro tiek kad prasideda didelis bardakas :)

Gal kokiu kitu ideju?

Dekavojam

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Na matau vieną if'ą, suformuojama užklausa su sąlyga arba be jos...
Kai yra daug galimų reikšmių tuomet naudok IN (reiksme,reiksme2)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

3 (edited by Ajaks 2010-11-23 12:04:32)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Pas mane tos pacios mintys (ir bandymai) buvo. Naudojau viena if'a ir poto selecte IN.

Bet tokiu checkbox'u grupiu yra ne viena ir bus ne viena, beto dar isiterpia kiti if'ai ir gaunasi per visa puslapio koda if'u misraine :)

Tai tiesiog idomu ar galetu buti kitokiu sprendimu, galbut viska kazkaip sumesti i viena koki array ir is jo atsirinkineti kas yra ko nera...bet cia tokie greiti pamastymai ant visisko durniaus.... kazkaip man tie if'ai nelabai kaip atrodo.

O gal cia normalu pas programuotojus pastoviai suvaryti 20 if'u per puslapi ir nieko geriau neisrasi? :)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Pas programuotojus yra normalu stengtis nekartoti to pačio kodo.

Jeigu tarkim pas tave gaunasi toks kodas:

$if($_GET["kazkas_1"] == "on"){
  $query .= " AND `kazkas_1` = 'TRUE'";
}

$if($_GET["kazkas_2"] == "on"){
  $query .= " AND `kazkas_2` = 'TRUE'";
}

Tai viską juk gali perdaryti į:

$parametrai = array("kazkas_1", "kazkas_2");

foreach($parametrai AS $parametras){
  $if($_GET[$parametras] == "on"){
    $query .= " AND `" . $parametras . "`= 'TRUE'";
  }
}

p.s. čia tik pseudo-kodas.

O kokia optimalią struktūrą kažkas konkrečiai sugebės parašyt čia jau individualus dalykas.

5 (edited by Ajaks 2010-11-23 13:58:22)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

minde> vat apie tai as kazka tokio ir galvojau. Su tais ifais gaunasi kodu (siuo atveju selectu) kartojimas.Man tas ir nepatiko.

Turbut reikes ziureti per tuos masyvus, ka cia siuo atveju padarius... Dekui

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Na as toliau sukineju galva kaip cia gudriau issprendus mano problemas ir dabar toks klausimas iskilo - jeigu as turiu dvi grupes checkbox'u ir turiu tokia sql komanda: select x from tb where stulpelis1 IN (kazkas1, kazkas2, kazkas3) AND stulpelis2 IN (kitas1, kitas2, kitas3).

stulpelis1 siuo atveju susietas su pirmaja checkbox'u grupe (3 varnos) o stulpelis2 atitinkamai su antraja grupe (irgi 3 varnos).

Tai jeigu as pazymiu kazkuri checkbox'a pirmojoje grupeje, BET nepazymiu nieko antrojoje grupeje - tai man neismeta nei vieno rezultato. Kaltas cia kaip suprantu 'AND' kuris reikalauja kad kazkas butu pazymeta tiek vienoje tiek antroje grupeje.

Atitinkamai jeigu vietoj AND padariau OR, tai tada rezultatai ismetami bet ismetami blogai, t.y. pirmos grupes rezultatai pridedami prie antros grupes rezultatu bet jie nera priklausomi vienas nuo kito (o turi buti priklausomi t.y. pirmos grupes filtravimas kartu turi susisieti su antros grupes filtravimu).

Tai dabar klausimas, ar yra kazkokios funkcijos ar komandos kuriu pagalba galima butu gauti visus lenteles stulpelio rezultatus jeigu kintamasis paduoda tuscias reiksmes? jeigu kitas1 ir kitas2 ir kitas3 - tusti kintamieji? Nes dabar jeigu gauna tuscia tai neduoda jokio rezultato, o as noriu kad duotu visus. Per gerai noriu? :)

Dekui

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Na čia yra elementari logika. Ji programavime reikalinga (-;

Jeigu tau reikia, kad nieko nepažymėjus kažkokioje checkbox'ų grupėje paliktu visus rezultatus, tai dinamiškai konstruodamas SQL užklausą net neįtrauk to stulpelio į WHERE sąlygą.

Pvz.:

Iš vis niekas nepažymėta:
SELECT x
FROM tb

Kažkas pažymėta pirmoje grupėje:
Užklausa:
SELECT x
FROM tb
WHERE stulpelis1 IN (kazkas1, kazkas2, kazkas3)

Kažkas pažymėta antroje grupėje:
Užklausa:
SELECT x
FROM tb
WHERE stulpelis2 IN (kitas1, kitas2, kitas3)

...

Kokiu būdu tu tikrinsi ir konstruosi užklausą čia jau tavo reikalas. Galiu tik pasakyti, kad iki rimtesnio programavimo čia dar labai toli. žmonės su šiais uždaviniais susiduria jau N metų ir juos visaip sprendžia (ir jų internete jau yra N variantų).

Gali konstruoti elementariai. Gali gamintis kažkokį tai SQL konstruktorių, kuris gamins tau užklausas pagal tavo pateiktus duomenis/parametrus - reikia turėt fantazijos (-; Nekurk problemų ten kur jų nėra. (-;

8 (edited by Ajaks 2010-11-24 11:37:48)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Tai ka pateikei savo pvz tai man aisku kaip diena. Bet klausimas ne tame. Klausimas kokie yra budai butent to 'konstravimo' kaip minejai. Man tu konstravimo pvz ir reikia. Yra internete...kur? :)

Aisku kuo paprasciau tuo geriau, todel ir idomu kuris variantas gali buti paprastas.

Imti visas galimas kombinacijas ir kiekvienai kombinacijai kartoti SQL uzklausos koda (tik siek tiek pakeista?)

Jeigu pazymeta 1 grupe - kodasA
Jeigu pazymeta 1 ir 2 grupes - kodasB
Jeigu pazymeta 1 ir 2 ir 3 grupes - kodasC
Jeigu pazymeta 1 ir 3 grupes - kodasD
Jeigu nepazymeta - kodasE

(aisku kai kur kartojasi salyga bet esme manau aiski)

ir t.t. ?

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Tie būdai egzistuoja daugumoje didesnių turinio valdymo sistemų ar karkasų. Vienokius ar kitokius juos kuria beveik kiekvienas (-;

Juos turi surasti ir išbandyti pats. Ne visada jų ir reikia. Jeigu sistema paprasta tai kam naudoti kažkokį griozdišką SQL konstruktorių?

O ką naudoti ar ką rinktis reikia spręsti tik tada, kai turėsi aišku savo konstruojamų SQL užklausų aibę. Tik tada galima pačiam kurti savo konstruktorių ir kelti tas konstravimo operacijas į aukštesnę abstrakciją.

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Gal turi bent pora 'SQL konstruktoriaus' pavyzdziu?

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

http://framework.zend.com/manual/en/zend.db.html pradžiai užteks.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Ajaks wrote:

Gal turi bent pora 'SQL konstruktoriaus' pavyzdziu?

http://phpmyadmin.git.sourceforge.net/g … search.php
http://phplens.com/lens/adodb/docs-active-record.htm
http://dom.as/2008/01/02/my-own-databas … ion-class/  <-- (-;

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Ok dekui

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Na kagi, problema buvo isspresta panaudojus idomu SQL sprendima is cia:

http://timothychenallen.blogspot.com/20 … rs-in.html

Aisku siek tiek pritaikius esamai checkbox'u strukturai.

Ir nereikejo jokiu sudetingu konstruktoriu :)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Reiškia mes nesupratom ko tu klausei arba tu nemokėjai paklausti.

16 (edited by Ajaks 2010-11-25 09:53:32)

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Kad ateities postu ieskotojams butu aiskiau tai pakartosiu jog problema buvo tokia:

"Bet, jeigu nepazymiu nei vieno checkbox'o tuomet man jokiu rezultatu neismeta visai. O kaip padaryti kad jeigu nepazymeta nei viena varna tai ismestu absoliuciai visus variantus" - ir visa tai turint daugiau negu viena checkbox'u grupe.



Kitaip tariant reikia kad prie salygos 'nepazymetas nei vienas checkboxas' , SQL uzklausos WHERE dalis ismestu visus rezultatus taciau tuo pat metu , tas pats kodas, gaves kazkokia reiksme is checkbox'o (bent vienas pazymetas) jau pradetu filtruoti rezultatus. Viso kode yra viena SQL uzklausa kuri veikia priklausomai nuo ateinanciu duomenu is formos ir jeigu duomenu nera tai suveikia tos uzklausos viena dalis o jeigu duomenys yra (pazymetos varnos) tai suveikia tos pacios uzklausos antra dalis.

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Taip, bet apie tą/tas užklausas kai parašiau, kad parašei, kad tipo su užklausom aišku kaip diena, tau idomu, kaip tas užklausas dinamiškai konstruoti (-; O vat rezultatas - nežinojai, būtent kaip išgauti duomenis teisingai iš DB. Na nieko, čia forumas, pasitaiko nesusišnekįjimo dažnai (-;

Re: Duomenu filtravimas pagal html checkbox (PHP, MySQL)

Nu jo, greiciausiai taip ir buvo. As tiesiog parasiau jog puikiai suprantu kad norint gauti visus rezultatus nereikia naudoti where, bet mano atveju noras buvo tureti where IR prie tam tikru salygu gauti visus rezultatus :)

Dekui bet kuriuo atveju