2009-03-02 100 views
1

我对PHP相当陌生,正在为我的公司创建一个网站。我正在使用我已经获得的一些现有代码,但似乎无法使其正常工作 - 任何帮助将非常感谢!PHP/HTML - isset函数

我有一个变量$ 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.是否有一些显然不正确的代码?

回答

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; 
+0

谢谢。看来我已经给过的代码看起来有点过时了!在接受你的建议之后,代码完美地工作:) – Tray 2009-03-02 18:49:22

0

如何$id被设置?如果register_globals已关闭(并且在PHP 4.2及更新版本中默认关闭),则需要查看$_GET['id']$_POST['id'](或$_REQUEST['id'],但有理由避免)。

1

首先,如果这是PHP 5.X我强烈建议您不要通过引用使用&来传递变量。话虽如此。使用该函数时,isset函数调用将始终为真。但是你会在setdefault($ id,0)上收到一个未定义的变量警告。

试试这个。

$id = isset($id) ? $id : 0; 
0

代码设置$id从查询字符串(browse.php?id=3)有时也需要包括在内。您可能会考虑PHP具有的register_globals设置,它将在包含在查询字符串中时自动创建变量。不要重新启用该功能,几年以来,这已被证明是一个非常糟糕的主意。

在使用它之前,您从查询字符串中提取的任何变量都需要检查类型/安全性。因此,例如,你可能会从$_GET超级全局拉变量,检查,看看是否是数字,如果没有,那么设置默认:

if (!is_numeric($_GET['id']) { 
    setdefault($_GET['id'], 0); 
} 
1

如果没有设置$ id,则调用setdefault($ ID,0)会产生一个警告。类似setdefault的函数在PHP中不起作用。改用它。

if (!isset($id)) $id = 0; 

如果你这样做是为数组变量,比如$ _GET和$ _POST,你可以这样做:因为你立即停止使用$ _GET数组和

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); 

这种回报的形式比较好只使用在其余代码中清理的变量。您只需清理一次外部变量,并且不要在代码中再次触摸外部变量。 $ A可以是$ _GET,$ _POST,$ _REQUEST或$ _COOKIE。

它也为你处理恼人的magic_quote东西,所以你知道变量中的数据是用户发送的文本。请记住在将其发送回用户或数据库时再次清理它。