Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 8. 2. 2019, 09:13:25
Zdravim,
pri formulary na vyhladavanie mam rozne vybery, trebars zakaznik: Vybrat vsetkych Vybrat jednotlivo ci jedneho. POkial vyberie jedneho ci viacerych tak mi kod funguje, je to cez GET, aby som mohol mat bookmarky. ?datum=all&&id_zakaznik%5B%5D=1&poslat=vyhladat#vysledky funguje dobre... nefunguje len vtedy ked mam v premenej id_zakaznik hodnotu 'all' , v kode mam to takto: if (($_GET['id_zakaznik']) == 'all') { $zakaznik = ""; } else { $zakaznik .= ' AND (bal.id_zakaznik = ' . implode(' OR bal.id_zakaznik = ', $_GET['id_zakaznik']) . ')'; } Pokial sa prenasa cislo tak mi to pekne urobi, pokial mi prenasa 'all' tak vyhodi chybu a v premenej nemam nic... AND (bal.id_zakaznik = ) ... Pravdepodobne to robia zatvorky [] ale netusim ako to opravit... Pozivam vyber zo <SELECT name="id_zakaznik[]"> <Option name="id_zakaznik" value="1">vyber 1</option> </select> Vypada to tak, ze sa mi nevyhodnoti podmienka IF ak je premenna 'all' v adresnom riadku mam &id_zakaznik%5B%5D=all Diky za nakopnutie |
||
juriad Profil |
#2 · Zasláno: 8. 2. 2019, 09:28:06
Andrej.B:
Ano $_GET['id_zakaznik'] je vždy pole; if změň na:
if (in_array('all', $_GET['id_zakaznik'])) Mimochodem, tu druhou větev můžeš vyřešit lépe pomocí IN: $zakaznik .= ' AND bal.id_zakaznik IN ( ' . implode(', ', $_GET['id_zakaznik']) . ')'; A ještě ti tam chybí podmínka na to, že $_GET['id_zakaznik'] není prázdné (empty), možná ji máš uvedenou dříve.
|
||
Kajman Profil |
#3 · Zasláno: 8. 2. 2019, 09:59:57
Andrej.B:
Pozor, kód není ošetřený na sql injection! |
||
Andrej.B Profil |
#4 · Zasláno: 8. 2. 2019, 10:53:57
juriad:
takze v poli nemoze byt neciselna hodnota, v tom to pripade id_zakaznik['all']? ten riadok s IN by potom vypadal v podmienke ako AND bal.id_zakaznik IN 3,4,5,8 pri vybrati tychto zakaznikov... To som nikdy takto nepouzil, vypada to krajsie :) diky Kajman: to nebude problem (ano viem), je to vnutorna aplikacia pre par ludi... stale vytvaram system na odvadzanie vyroby ako tu uz 3 mesiace obcas napisem s nejakym problemom :) Zatial to funguje ako ma, robi krasne zostavy, statistiky, ze som az prekvapeny, ako to ide :) diky |
||
juriad Profil |
#5 · Zasláno: 8. 2. 2019, 11:13:20
Andrej.B:
V PHP pole může obsahovat více datových typů zároveň. V tomto případě může uživatel odeslat (nevím, jak máš udělán formulář na frontendu): id_zakaznik[]=42&id_zakaznik[]=all&id_zakaznik[]=1 a stačí tedy, že mezi hondotami je all. Příjde mi to lepší než kontrolovat, že pole má délku 1 a ten jedinný prvek je 'all'.
|
||
Andrej.B Profil |
#6 · Zasláno: 8. 2. 2019, 16:43:46
juriad:
A ještě ti tam chybí podmínka na to, že $_GET['id_zakaznik'] není prázdné (empty), možná ji máš uvedenou dříve. Skusam to dat do jednej podmienky, ale akosi mi to nejde... if (empty($_GET['datum']) OR (in_array('all', $_GET['datum']))) { $casovac = ""; // ak je premenna datum prazdna alebo obsahuje 'all' nedavat nic, inak zober podmienku v ELSE } else { $casovac .= ' AND (MONTH(FROM_UNIXTIME(bal.datum_balik)) = ' . implode(' OR MONTH(FROM_UNIXTIME(bal.datum_balik)) = ', $_GET['datum']) . ')'; } Warning: in_array() expects parameter 2 to be array, string given ako to dat dokopy? |
||
Časová prodleva: 6 let
|
0