Autor Zpráva
Andrej.B
Profil
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
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
Andrej.B:

Pozor, kód není ošetřený na sql injection!
Andrej.B
Profil
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
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
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0