Přenášená hodnota checkboxu se uloží vždy jako false

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Hafran
Člen | 121
+
0
-

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
+
0
-

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)

Hafran
Člen | 121
+
0
-

No když si normálně dumpnu $form->data tak tam nemám boolean ale string „on“ :/

h4kuna
Backer | 740
+
0
-

To je divné, jak sestavuješ formulář?

jiri.pudil
Nette Blogger | 1032
+
0
-

A co $form->values?

Hafran
Člen | 121
+
0
-

2 h4kuna – trošku komplikovaně, jenžto je součástí stepformu, ale v zásadě jen rozšiřuje UI/Form a je schován v UI/Control. Generuji ho v constructoru.

2 jiri.pudil – promiň, myslel jsem samozřejmě data z $form->values

macejko1
Člen | 18
+
0
-

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
+
0
-

Na co foreach? Melo by stacit pretypovat z booleanu na int, viz

<?php
$hodnota = (int) $form->values->checkboxValue;
?>
macejko1
Člen | 18
+
0
-

A ako by si riesil ked mas tych checkboxov viac?

Predpokladaj situaciu, ze mas na stranke viac checkboxov a vysledok chces ulozit do DB. Tak mi nieje jasne ako by si to tymto sposobom urobil.

llsm
Člen | 121
+
0
-

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.

macejko1
Člen | 18
+
0
-

Jasne jasne rozumiem. Ja to skor riesim opacne, ale to je kazdeho osobna vec.

Kazdopadne, urcite pomoze pretypovanie, je jedno ktory sposob pouzijes.