PHP / HTML - isset函数

时间:2009-03-02 18:35:34

标签: php html variables isset

我是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.我的代码中是否存在明显不正确的内容?

5 个答案:

答案 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);
}