【问题标题】:PHP/HTML - isset functionPHP/HTML - isset 函数
【发布时间】:2010-10-10 20:20:39
【问题描述】:

我对 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。我的代码是否有明显错误?

【问题讨论】:

    标签: php html variables isset


    【解决方案1】:

    您可能希望 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;
    

    【讨论】:

    • 谢谢。看来我已经查看的代码现在有些过时了!听取您的建议后,代码完美运行:)
    • 如果 id 不是 $_GET 中的索引,调用 setdefault($_GET['id'], 0) 仍然可以生成警告。
    • 您可以通过使用 array_key_exists('id', $_GET) 来改进这一点并且不会生成警告
    • isset 不会产生警告。这是一种语言结构,不是普通功能:us2.php.net/manual/en/function.isset.php
    【解决方案2】:

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

    试试这个。

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

    【讨论】:

      【解决方案3】:

      如果 $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 内容,因此您知道变量中的数据是用户发送的文本。请记住在将其发送回用户或数据库时再次对其进行清理。

      【讨论】:

        【解决方案4】:

        $id 是如何设置的?如果register_globals 已关闭(在 PHP 4.2 和更高版本中默认关闭),您需要查看 $_GET['id'] 或 $_POST['id'](或 $_REQUEST['id'],但有理由避免这样做)。

        【讨论】:

          【解决方案5】:

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

          从查询字符串中提取的任何变量都需要在使用前检查类型/安全性。因此,例如,您可以从$_GET 超级全局变量中提取变量,检查它是否为数字,如果不是则设置默认值:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-25
            • 2017-10-25
            • 1970-01-01
            • 2016-07-02
            • 1970-01-01
            • 1970-01-01
            • 2017-04-10
            • 1970-01-01
            相关资源
            最近更新 更多