Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

\IPS\Helpers\Form\Radio string 0

Рекомендованные сообщения

04/27/19 13:04 (изменено)

Здравствуйте. У меня есть вот такое поле в форме:

 

	$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 ?

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

\IPS\Helpers\Form\Number ?

Это тут каким боком, если у Вас Radio?

Вопрос в чем? Сохранить или отобразить?

Поделиться сообщением


Ссылка на сообщение

Не до конца код похоже написал.

 

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, чтобы правильно обрабатывать это, нужно писать !== верно?

Поделиться сообщением


Ссылка на сообщение

Из-за этого?

 

HTML-формы не передают целые, дробные числа или булевые переменные: они всегда передают строки. Для проверки является ли строка числом, используйте функцию is_numeric().

Поделиться сообщением


Ссылка на сообщение

В чем проблема написать - $values['map_loadingame'] != ''

 

Ноль (string или число) не равно пустой строке.

Но сам ноль в boolean типе является false.

На будущее, использовать ноль в качестве значение какого-то параметра не самая лучшая идея.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...