我是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使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

setdefault(

您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

$id = array_key_exists('id', 

您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

setdefault(

您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

<*>

甚至更简单(使用三元运算符):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

甚至更简单(使用三元运算符):

<*>GET) ?

您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

setdefault(

您可能希望PHP使用$ _POST和$ _GET作为全局变量。 PHP曾经以这种方式在当天设置,但较新的版本要求您明确引用这些变量。

你可以试试这个:

<*>

甚至更简单(使用三元运算符):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

甚至更简单(使用三元运算符):

<*>GET['id'] : 0;

甚至更简单(使用三元运算符):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

甚至更简单(使用三元运算符):

<*>

其他提示

首先,如果这是PHP 5.X我强烈建议你不要使用&amp;参考传递变量。话虽如此。使用该函数,isset函数调用将始终为true。但是你会在setdefault($ id,0);

上收到一个未定义的变量警告

试试这个。

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

如果未设置$ 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(

如果未设置$ id,则调用setdefault($ id,0)将生成警告。像setdefault这样的函数在PHP中不起作用。请改用它。

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

如果您对数组变量执行此操作,例如$ _GET和$ _POST,则可以执行此操作:

<*>

这种返回形式更好,因为你立即停止使用$ _GET数组,只使用在其余代码中清理的变量。您清理外部变量一次,而不再在代码中再次触摸外部变量。 $ A可以是$ _GET,$ _POST,$ _REQUEST或$ _COOKIE。

它还会为您处理恼人的magic_quote内容,因此您知道变量中的数据是用户发送的文本。只需记住在将其发送回用户或数据库时再次清理它。

GET, 'id', 0);

这种返回形式更好,因为你立即停止使用$ _GET数组,只使用在其余代码中清理的变量。您清理外部变量一次,而不再在代码中再次触摸外部变量。 $ A可以是$ _GET,$ _POST,$ _REQUEST或$ _COOKIE。

它还会为您处理恼人的magic_quote内容,因此您知道变量中的数据是用户发送的文本。只需记住在将其发送回用户或数据库时再次清理它。

如何设置 $ id ?如果 register_globals 关闭(默认情况下它在PHP 4.2及更高版本中关闭),则需要查看 $ _ GET ['id'] $ _ POST [ 'id'] 代替(或 $ _ REQUEST ['id'] ,但有理由避免这种情况。)

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

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

if (!is_numeric(

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

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

<*>GET['id']) { setdefault(

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

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

<*>GET['id'], 0); }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top