TemKa_SD 9 04/27/2019 01:04 PM (edited) Здравствуйте. У меня есть вот такое поле в форме: $form->add( new \IPS\Helpers\Form\Radio( 'map_loadingame', isset($settings['map_loadingame']) ? $settings['map_loadingame'] : 0, FALSE, array( 'options' => array ( 0 => 'map_loadingame_screen', 1 => 'map_loadingame_ingame' ) ), NULL, NULL, NULL, 'map_loadingame' ) ); Значения 0 и 1 возвращаются в виде строки, т.е условие срабатывает когда в нем 0 в "": "0". Пробовал отформатировать (int) $values['map_loadingame'] - не помогает. Как быть? P.S.: Или это foreach в строку переводит? И соответственно там никогда не будет 0, можно сотавить "0" и проблем не будет, даже если сохранять \IPS\Helpers\Form\Number ? Edited April 27, 2019 by TemKa_SD Share this post Link to post
newbie 1,721 04/30/2019 05:44 AM \IPS\Helpers\Form\Number ? Это тут каким боком, если у Вас Radio?Вопрос в чем? Сохранить или отобразить? Share this post Link to post
TemKa_SD 9 04/30/2019 05:54 AM Не до конца код похоже написал. public function updateAsSettings( $cfg_name, $settingValues ) { if ( $this->id ) { $result = iterator_to_array( \IPS\Db::i()->select( 'cfg_key', static::$cfgTable, array( 'cfg_name=?', $cfg_name ) ) ); if( $result ) { foreach( $settingValues as $k => $v ) { if ($v != '0' AND $v != NULL) { if( \in_array( $k, $result ) ) { \IPS\Db::i()->update( static::$cfgTable, array( 'cfg_value' => $v ), array( 'cfg_name=? AND cfg_key=?', $cfg_name, $k ) ); } else { \IPS\Db::i()->insert( static::$cfgTable, array( 'cfg_name' => $cfg_name, 'cfg_key' => $k, 'cfg_value' => $v ) ); } } else { \IPS\Db::i()->delete( static::$cfgTable, array( 'cfg_name=? AND cfg_key=?', $cfg_name, $k ) ); } } } } else { foreach ($settingValues as $k => $v) { if ($v != '0' AND $v != NULL) { \IPS\Db::i()->insert( static::$cfgTable, array( 'cfg_name' => $cfg_name, 'cfg_key' => $k, 'cfg_value' => $v ) ); } } } } Я сохраняю значения полей в своей функции таким образом, меня сильно смущет $v != '0' в кавычках, без них не работает. Я тут подумал, скорей всего, если указать $v != 0 - оно будет считать 0 не значением, а как NULL, чтобы правильно обрабатывать это, нужно писать !== верно? Share this post Link to post
newbie 1,721 04/30/2019 06:08 AM https://www.php.net/manual/ru/types.comparisons.php Share this post Link to post
TemKa_SD 9 04/30/2019 06:15 AM Из-за этого? HTML-формы не передают целые, дробные числа или булевые переменные: они всегда передают строки. Для проверки является ли строка числом, используйте функцию is_numeric(). Share this post Link to post
siv1987 2,623 04/30/2019 12:57 PM В чем проблема написать - $values['map_loadingame'] != '' Ноль (string или число) не равно пустой строке.Но сам ноль в boolean типе является false.На будущее, использовать ноль в качестве значение какого-то параметра не самая лучшая идея. Share this post Link to post