1

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

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

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

到目前为止,我已经尝试过这个没有运气并且有点卡住,任何帮助将不胜感激,因为我对 PHP 非常陌生。谢谢 :)

$course = $_GET['usercourse'];

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

else
{
}
4

6 回答 6

3

使用该isset()功能。

if (isset($_GET['usercourse'])
{
    //do something
}
于 2012-11-12T18:38:54.030 回答
2

使用isset()功能。

if (isset($_GET['usercourse'])
{
    //do something
}
于 2012-11-12T18:43:06.217 回答
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';

更好的是:

使用过滤功能

于 2012-11-12T18:45:08.143 回答
1

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

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

例如:

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

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

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

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

您可以使用三个选项来检查数组索引:isset、empty 和 array_key_exists。

isset($x)如果 $x 不为空,则返回 true。 isset本质上等同于: $x !== null,除了 isset 不会发出未定义的索引/变量通知。

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

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

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

如果 $content 被包裹在 isset 或 empty 中,您可以在这种情况下使用它,但这会妨碍代码的可读性。如果您想在某些条件下保留未定义的变量,请将其定义为 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_input来避免重写大量处理用户输入的代码。

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


顺便说一句,您应该始终在错误的情况下进行开发,并且应该监视任何类型的错误(警告、通知等)。这将有助于防止潜在的逻辑错误,并倾向于保持代码清洁。(似乎从不发出通知的代码和编写良好的代码之间存在相关性。)

于 2012-11-12T19:08:51.317 回答
1

使用isset函数,像这样,

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

if (empty($course))
{
$course = 'All';
} else {
 //do something...
 }
于 2012-11-12T18:41:18.187 回答
0

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

if (!isset($course) || empty($course) ) {
    $course = 'All';
}
于 2012-11-12T18:39:08.773 回答