如果没有发布任何内容,如何设置PHP变量呢?

时间:2012-11-12 18:36:46

标签: php variables

我有一个PHP图形页面,显示从另一个PHP文件生成的图形。

生成PHP文件的图形将通过AJAX脚本更改其变量。

当PHP图形页面首次加载时,我需要能够识别生成的PHP文件中的变量是否为空,这样我就可以将其更改为默认值,直到数据通过$ _get函数覆盖它。

到目前为止,我已经尝试过没有运气而且有点卡住,任何帮助都会非常感激,因为我对PHP很新。谢谢:))

$course = $_GET['usercourse'];

if (empty($course))
{
    $course = 'All';
}

else
{
}

6 个答案:

答案 0 :(得分:3)

使用 isset() 功能。

if (isset($_GET['usercourse'])
{
    //do something
}

答案 1 :(得分:2)

使用 isset() 功能。

if (isset($_GET['usercourse'])
{
    //do something
}

答案 2 :(得分:1)

使用isset功能,如下所示,

if(isset($_GET['usercourse']))
$course = $_GET['usercourse'];

if (empty($course))
{
$course = 'All';
} else {
 //do something...
 }

答案 3 :(得分:1)

天真的代码示例,用于检查变量是否已设置且不等于空字符串:

$course = isset($_GET['usercourse']) && $_GET['usercourse'] !== ''
    ? $_GET['usercourse']
    : 'All';

稍微好一些:

$course = isset($_GET['usercourse']) && preg_match('@^(LIST|of|AccEPtabLE|vaLUes)$@i', $_GET['usercourse'])
    ? $_GET['usercourse']
    : 'All';

$course = isset($_GET['usercourse']) && in_array($_GET['usercourse'], array('list', 'of', 'acceptable', 'values'))
    ? $_GET['usercourse']
    : 'All';

更好:

使用Filter Functions

答案 4 :(得分:1)

其他答案已经回答了你的直接问题,但我认为这里有更深层次的东西需要解释。

您通常希望避免访问您不确定存在的数组索引。

例如:

$a = array('foo' => 'bar');
echo $a['test']; //bad!

同样适用于$ _GET,$ _POST,$ _COOKIE等。除非您知道它们存在,否则不要访问索引。

请注意,对于用户定义的索引,这会转换为“除非您检查过索引存在,否则不要访问索引。”

$content = $_GET['content']; //ALWAYS wrong

检查数组索引有三个选项:isset,empty和array_key_exists。

如果$ x非空,则

isset($x)返回true。 isset基本上等同于:$x !== null,但isset不会发出未定义的索引/变量通知。

(empty($x) === (!isset($x) || !$x))

换句话说,空虚认为任何松散等于假的东西都是空的。这在某些情况下很有用。

array_key_exists($key, $array)是一个简单的保证,$array[$key]不会发出未定义的索引通知。

那么以正确的方式提取用户输入的最简单方法是什么?

$content = (isset($_GET['content'])) ? $_GET['content'] : null;

如果用户提供了输入,那么$content !== null就会有一个重要的保证。


请注意,您还应避免使用保留路径使变量未定义:

if (isset($_GET['content'])) {
    $content = $_GET['content'];
}

echo $content; //WRONG - $content is not guaranteed to be defined

如果它包含在isset或空中,你可以在那种情况下使用$ content,但这会妨碍代码的可读性。如果要在某些条件下保留未定义的变量,请将其定义为null。如果没有发出变量,则将其保留为“未定义”,不存在警告。

$a = null;
var_dump($a === $b); //true, because the non-existent $b is treated as false
//(note that this is terrible style though -- this would issue a variable doesn't exist warning for $b

当然,还有PHP的filter扩展名。特别是,您可以使用filter_input来避免重写大量用于处理用户输入的代码。

您可以在适当的部分阅读更多关于正确(或偏执,有些人可能称之为)输入处理herehere的信息。


顺便说一句,你应该始终将错误发展到最后,你应该监视任何类型的错误(警告,通知等)。这将有助于防止潜在的逻辑错误,并且它可以保持代码清洁。 (似乎在从不发出通知的代码和编写良好的代码之间存在关联。)

答案 5 :(得分:0)

为什么不与空字符串进行比较?

if (!isset($course) || empty($course) ) {
    $course = 'All';
}