我有一个变量**$id**,它标识要在页面上显示的产品类别类型。我首先需要检查id变量是否已设置,如果没有,则将变量默认为类别0。
代码如下:
setdefault($id, 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
因此,对于地址www.website.com/browse.php
,我希望它默认为$id = 0
。
对于地址www.website.com/browse.php?id=3
,我希望它设置$id = 3
并显示相关产品。
但是,尽管设置了$id
,它仍然默认为0
。我的代码有什么明显不正确的地方吗?
6条答案
按热度按时间vwkv1x7d1#
您可能希望PHP使用$_POST和$_GET作为全局变量。PHP过去常常是这样设置的,但较新的版本要求您显式引用这些变量。
你可以试试这个:
或者更简单地(使用三元运算符):
q9yhzks02#
首先,如果这是PHP 5.X,我强烈建议你不要使用&通过引用传递变量。话虽如此isset函数调用在函数内将始终为真。但是您将在setdefault($id,0)上收到一个未定义的变量警告;
试试这个。
o8x7eapl3#
如果没有设置$id,调用setdefault($id,0)将生成一个警告。像setdefault这样的函数在PHP中不起作用。用这个代替。
如果你是为数组变量,比如$_GET和$_POST,你可以这样做:
这种返回形式更好,因为您可以立即停止使用$_GET数组,而只使用在其余代码中清理的变量。你只需要清理一次外部变量,就再也不会在代码中使用外部变量了。$A可以是$_GET、$_POST、$_REQUEST或$_COOKIE。
它还为您处理令人讨厌的magic_quote内容,以便您知道变量中的数据是用户发送的文本。只要记住在将它发送回用户或数据库时再次清理它。
4zcjmb1e4#
$id
是如何设置的?如果register_globals
是关闭的(在PHP 4.2及更新版本中默认是关闭的),则需要查看$_GET['id']
或$_POST['id']
(或$_REQUEST['id']
,但有理由避免这样做)。sh7euo9m5#
还需要包括将
$id
设置为查询字符串(browse.php?id=3
)中的某个时间的代码。您可能会想到PHP的register_globals
设置,当查询字符串中包含变量时,该设置将自动创建变量。不要重新启用该功能,几年来,这已经被证明是一个非常糟糕的主意。从查询字符串中提取的任何变量都需要在使用之前检查其类型/安全性。例如,你可以从
$_GET
超级全局变量中提取变量,检查它是否是数字,如果不是,则设置默认值:7gcisfzg6#
你不需要为此编写一个helper函数。
如果要从
$_GET['id']
声明$id
并回退到零,请使用以下命令:当然,这并不能验证
$id
包含来自用户的整数值。下一步需要验证该值。