Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

\IPS\Helpers\Form\Radio string 0

Recommended Posts

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

 

	$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 by TemKa_SD

Share this post


Link to post
Share on other sites

\IPS\Helpers\Form\Number ?

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

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

Share this post


Link to post
Share on other sites

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

 

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
Share on other sites

Из-за этого?

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...