如何检查undefined $ _POST变量索引的值?

时间:2012-07-02 22:40:55

标签: php

我的问题是,我们如何在$ _POST中检查已发布变量的值,而无需定义它们,如代码所示。

if ($_SESSION["Admin"]=="" AND $_REQUEST[act]!="show_login" AND
$_REQUEST[act]!="chk_login" ) {  #not logged in    show_login();   
return;

我收到了这些错误,

  • 未定义的索引:在F:\ xampp \ htdocs \ shangloo \ admin \ index.php中执行 第6行
  • 未定义索引:F:\ xampp \ htdocs \ shangloo \ admin \ index.php中的管理员 第6行

3 个答案:

答案 0 :(得分:2)

在尝试访问$_REQUEST数组中的索引之前使用isset(),如下所示:

if( $_SESSION["Admin"] == "" && 
    (!isset( $_REQUEST['act']) || 
        ( $_REQUEST['act'] != "show_login" && $_REQUEST['act'] != "chk_login")))

我想我已经添加了你正在寻找的正确逻辑。

答案 1 :(得分:0)

if(isset($_SESSION))
{
   foreach($_SESSION as $sessKey => $sessVal)
   {
      echo $sessKey . ' - ' . $sessVal.'<br>';
   }
}
echo count($_SESSION);

现在我不确定这是否与您的要求完全相同,但是当我接受它时您想知道会话是否已设置,如果是,那么会话中的数据是什么。 $_SESSION, $_COOKIE, $_POST, $_GET, $_REQUEST本质上都是数组,因此在使用它们时可以将它们视为数组。

你可能遇到的另一个问题..这是因为我在发布答案后发现你的错误是因为你正在使用xampp,大概是在windows上。您可能遇到与Windows文件系统的权限错误,并且会话无法写入本地temp或tmp目录。

此外,如果您不需要,我建议不要使用$_REQUEST,它是一个全局变量。因此,如果我发帖,请使用名称为admin的站点/软件获取请求,或者我设置一个cookie并将其命名为admin,$ _REQUEST将对其进行与任何特定定义版本相同的处理。

答案 2 :(得分:0)

我发现维护更容易检查循环中的所有变量:

<?php
    // VARIABLES NEEDED BY THIS PAGE
    $needed_session = array(
         'Admin' => "",
    );
    $needed_request = array(
         'act' => "",
    );
    foreach($needed_session as $var => $default)
        if (!isset($_SESSION[$var]))
            $_SESSION[$var] = $default;
    foreach($needed_request as $var => $default)
        if (!isset($_REQUEST[$var]))
            $_REQUEST[$var] = $default;
?>

即使写入_REQUEST实际上是一个糟糕的编码实践,至少应该区分POST和GET。

作为变体,您可以仅声明已知的变量:

    foreach($needed_request as $var => $default)
        if (!isset($_REQUEST[$var]))
            ${$var} = $default;
        else
            ${$var} = $_REQUEST[$var];

有各种可能性:     1.您可以在导入时在语法上验证变量,例如通过正则表达式)。     2.你可能会声明一些“真正需要的变量”,其缺席会抛出一个错误页面。

但是,如果你在这条路上走得更远,你最好建议你去研究更高层次的框架。