PHP检查是否设置了选项,如果没有设置回退到默认值

时间:2017-06-15 11:38:08

标签: php isset

我尝试使用设置表单输出用户已保存的选项值。

我添加了一些检查,因此选项值永远不会定义。

$option[3]返回该选项的默认值。当用户在数据库中没有保存任何选项时,我试图使用它。

$getoption[$option[0]]是用户保存的数据库中的用户选项。

以下行导致了问题。某些用户选项会返回false。出于某种原因,下面的行认为该选项未定义并返回$option[3]而不是保存的值false

$optionvalue = ( !isset($getoption[$option[0]]) ) ? $option[3] : $getoption[$option[0]];

如何创建它以便返回false,但如果数据库中没有保存任何内容,请让它返回$option[3]

示例数据:

$database_option = false; // <-- by the user
$default_option = true; // <-- only return when there's nothing in $database_option (false is not considered 'nothing')

$optionvalue = ( !isset($database_option) ) ? $default_option : $database_option;

echo $optionvalue; // I want this to return 'false'

2 个答案:

答案 0 :(得分:0)

即使变量的值为isset($variable)

true通常也会返回false。仅当值为false时,它才会返回null。请参考http://php.net/manual/en/function.isset.php

因此,您需要将用户选项的返回值设置为null,或者您可以完全检查下面的false

//Incorrect Answer
// $optionvalue = ( $getoption[$option[0]] == null || $getoption[$option[0]] == "" ) ? $option[3] : $getoption[$option[0]];

//Updated Answer
$optionvalue = ((isset($getoption[$option[0]]) && $getoption[$option[0]] == '') || !isset($getoption[$option[0]])) ? $option[3] : $getoption[$option[0]];

更新: J.Doe,我尝试过variuos选项&amp;发布了以下更新。我希望这会对你有所帮助。

/* These options prints the exact value assigned to the variable as result  */
$db_option = false; //-> Returns False
// $db_option = 5;  //-> Returns 5
// $db_option = 'String';  //-> Returns 'String'
// $db_option = true;  //-> Returns true

/* These options prints 'Default' as result */
// $db_option = ''; //-> Returns 'Default'
// $db_option = null; //-> Returns 'Default'
// unset($db_option); //-> Returns 'Default'
// Also, If there is no variable defined at all //-> Returns 'Default'

/* Default option */
$default_option = true;

$optionvalue = ((!isset($db_option)) || (isset($db_option) && ($db_option === '')) ) ? $default_option : $db_option;
var_dump($optionvalue);

答案 1 :(得分:0)

isset()函数仅检查变量是否为NULL。你应该检查你的病情值。

$ optionvalue =($ getoption [$ option [0]] ==&#34;&#34;))? $ option [3]:$ getoption [$ option [0]];