Codeigniter i ‘Disallowed Key Characters’ greška

Nakon slanja obrasca u kontroler dobijem beli ekran na kome piše samo ‘Disallowed Key Characters’.
Naravno, nisam uspeo naći šta uzrokuje navedenu grešku, jer je u kodu sve izgledalo normalno.
Tada sam našao post https://ellislab.com/forums/viewthread/235259/#1067410 koji mi je ponudio rešenje, koje se pokazalo adekvatnim za moj slučaj. Naime u fajlu:

system/core/input.php :

treba naći funkciju _clean_input_keys($str)

i izmeniti:

exit(‘Disallowed Key Characters.’);

u:

exit(‘Disallowed Key Characters.’. $str);

Sada će pored greške prikazati i koji to string pravi problem, što će znatno olakšati potragu za greškom. Zahvaljujući ovoj koerekciji našao sam problem u trenutku.

Polje za numerički unos u HTML5 (input type=number) i decimale u Chrom-u

Danas sam se suočio sa ovim problemom i našao sam odlično objašnjenje na Isotoma Blog, pa ću ga stoga preneti ovde kako ga ne bih izgubio 🙂

Kao što znamo, HTML5 donosi pregršt novih polja za obrasce, među kojima je i numerički tip. Očekivano, on služi za unos numeričkih podataka, ali kada u Crome (Chromium) pokušamo uneti broj sa decimalama i poslati obrazac dolazi do greške i Chrom nam saopšrtava da uneta vrednost nije ispravna.


<input type="number" />

input_number1

Obzirom da se pomenuto ne dešava u Firefox-u, postavlja se pitanje da li je problem u Chromu. Međutim Chrom se samo ponaša u skladu sa definicijom W3C. Brojčana polja imaju dodatne atribute „min“ (minimalna vrednost) i „step“ (korak uvećanja/umanjenja), koja određuju opseg vrednosti koje se mogu unositi. Osobina „min“ je očigledna i predstavlja najmanju vrednost koju polje može imati, dok je osobina „step“ manje intuitivna, Ona određuje korak uvećanja/umanjenja vrednosti prilikom kliktanja na sterlice gore/dole u polju za unos i standardna vrednost joj je 1. Ukoliko joj promenite vrednost na, recimo 3, vrednost će se uvećavati/umanjivati za 3 i ispravni unosi će biti 3, 6, 9, pa će vrednot, recimo 8 izazivati grešku. Isto je i sa decimalnim vrednostima, kao recimo 0.3 i sl. Standardni korak „1“ stoga podrazumeva ispravnim samo sve cele brojeve.

Međutim, ukoliko želite da svi brojčani unosi budu ispravni, kako celobrojni, tako i oni sa decimalnim delom, potrebno je postaviti osobinu „step“ na „any“ (bilo koji).


<input type="number" step="any" />

A ukoliko želite samo pozitivne brojeve dodajte i osobinu „min“ postavljenu na „0“.

Kod koraka postavljenog na „any“ korak uvećanja/umanjenja će biti „1“ i izgleda da nema mogućnosti da se u tom slučaju korak promeni.

CodeIgniter: Provera da li je u formi naveden fajl za upload

Prilikom programiranja jedne aplikacije imao sam potrebu da se na jednom obrascu (form) nađu slika i podaci i da sam obrazac služi kako za novi unos, tako i za izmenu postojećeg unosa.
Problem se javio ukoliko se u nekom momentu ne menja slika, a vrši se izmena nekog od podataka. Ukoliko u proceduri za validaciju pokrenem upload slike javlja se greška jer fajl nije priložen. Stoga sam odlučio da upload pokrenem samo u slučaju da je fajl priložen, a u suprotnom da izvršim samo izmenu ostalih podataka.

Nakon male pretrage po netu rešenje sam našao na www.stackoverflow.com:

Rešenje je u proveri vrednosti $_FILES varijable. Međutim, nije dovoljno samo proveriti da li fajl ima neku vrednost već i da li je veličina fajla veća od 0. Ukoliko njiedan fajl nije odabran za upload PHP će kao veličinu ($_FILES[‘userAvatar’][‘size’]) vratiti 0, a privremeno ime fajla ($_FILES[‘userAvatar’][‘tmp_name’]) neće biti postavljeno.

if (isset($_FILES['userAvatar']) && $_FILES['userAvatar']['size'] > 0){
     echo "fajl je priložen";
} else echo "fajl nije priložen" ;