Přenášená hodnota checkboxu se uloží vždy jako false
- Hafran
- Člen | 121
Zdravím,
mám formulář, v něm checkboxy (ano/ne) a ukládám jejich hodnoty do
databáze. Problém je, že checkbox mi při zaškrtnutí posílá hodnotu
„on“, při podmínce if ($input === TRUE) mi tedy projde a uloží se do
databáze (tinyInt(1)) ale uloží se mi jako 0. :/
Když se nezaškrtne tak se neuloží nijak, tedy můžu testovat jestli je hodnota null nebo 0, ale to mi příjde ošemetné a jednou by mě to vypeklo. Nevíte jak to udělat nebo ošetřit správně (myslím, že různé prohlížeče mohou poslat i jiné hodnoty než „on“, tak to nechci prostě testovat na $input == „on“.)
- jiri.pudil
- Nette Blogger | 1032
Nesaháš si snad pro hodnoty do $_POST
? Z
Nette\Forms\Controls\Checkbox
totiž hodnotu dostaneš jako
boolean, takže tam záleží už jen na tom, jak si s TRUE/FALSE poradí
použitá databázová vrstva.
Editoval jiri.pudil (3. 5. 2013 12:10)
- macejko1
- Člen | 18
Riesil som prednedavnom podobny problem. A to, ze form mi vracial hodnoty checkboxov ako boolean a ja som si to chcel do DB ukladat ako int (0/1). Nakoniec pomohlo ze som si vysledne hodnoty z formu prebehol foreachom a pretypoval.
Takze ak sa nemylim, mas 2 moznosti. Bud upravis DB a budes ukladat booelany, alebo vysledky checkboxov prebehnes spominanym foreach a pretypujes na int a tym dostanes vysledok 0 alebo 1.
Dufam ze pomoze.
Editoval macejko1 (4. 5. 2013 9:34)
- llsm
- Člen | 121
Zalezi na tom, jak ty data do databaze ukladas, tj. jak vypada tvoje zpracovani formulare. Ja to malokdy nejak automatizuji (naopak casto jmena poli ve formulari neodpovidaji nazvum v databazi), takze pak s kazdym vyplnenym polem formulare ve zpracovani pracuji zvlast (minimalne ho predam metode nebo do pole pro metodu pro vlozeni do db), takze pro me neni nikdy problem pretypovat konkretni promene a nevyzadovalo to zadnou logiku navic.