我是PHP的新手,我正在为我的公司创建一个网站。我正在使用我已经获得的一些现有代码,但似乎无法使其正常工作 - 任何帮助都将非常感谢!
我有一个变量 $ 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.我的代码中是否存在明显不正确的内容?
答案 0 :(得分:4)
您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。
你可以试试这个:
setdefault($_GET['id'], 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
甚至更简单(使用三元运算符):
$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0;
答案 1 :(得分:1)
首先,如果这是PHP 5.X我强烈建议你不要使用&参考传递变量。话虽如此。使用该函数,isset函数调用将始终为true。但是你会在setdefault($ id,0);
上收到一个未定义的变量警告试试这个。
$id = isset($id) ? $id : 0;
答案 2 :(得分:1)
如果未设置$ id,则调用setdefault($ id,0)将生成警告。像setdefault这样的函数在PHP中不起作用。请改用它。
if (!isset($id)) $id = 0;
如果您对数组变量执行此操作,例如$ _GET和$ _POST,则可以执行此操作:
function getuservar($A, $index, $default = '') {
if (!isset($A[$index])) return $default;
if (get_magic_quote_gpc()) return stripslashes($A[$index]);
return $A[$index];
}
$clean_id = getuservar($_GET, 'id', 0);
这种返回形式更好,因为你立即停止使用$ _GET数组,只使用在其余代码中清理的变量。您清理外部变量一次,而不再在代码中再次触摸外部变量。 $ A可以是$ _GET,$ _POST,$ _REQUEST或$ _COOKIE。
它还会为您处理恼人的magic_quote内容,因此您知道变量中的数据是用户发送的文本。只需记住在将其发送回用户或数据库时再次清理它。
答案 3 :(得分:0)
如何设置$id
?如果register_globals
已关闭(默认情况下在PHP 4.2及更高版本中已关闭),则需要查看$_GET['id']
或$_POST['id']
(或$_REQUEST['id']
,但有理由为了避免这种情况。)
答案 4 :(得分:0)
还需要包含从查询字符串($id
)到某个时间设置browse.php?id=3
的代码。您可能会想到PHP具有的register_globals
设置,它将在查询字符串中包含时自动创建变量。不要重新启用该功能,这几年已被证明是一个非常糟糕的主意。
在使用之前,需要检查从查询字符串中提取的任何变量的类型/安全性。例如,您可以从$_GET
超级全局中提取变量,检查它是否为数字,如果不是则设置为默认值:
if (!is_numeric($_GET['id']) {
setdefault($_GET['id'], 0);
}