如何检查未定义的 $_POST 变量索引的值


how to check value of undefined $_POST variable index?

我的问题是,我们如何检查 $_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 行
  • 未定义的索引:Admin in F:''xampp''htdocs''shangloo''admin''index.php on第 6 行

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

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

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

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

现在我不确定这是否正是您的要求,但正如我所认为的那样,您想知道是否设置了会话,如果是,那么该会话中的数据是什么。 $_SESSION, $_COOKIE, $_POST, $_GET, $_REQUEST本质上都是数组,因此在使用它们时可以将它们视为数组。

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

另外,如果您不必使用$_REQUEST,我不建议使用它,它是一个全局变量。因此,如果我发布帖子,以管理员的名义向您的网站/软件发出请求,或者我设置了一个cookie并称其为admin,$ _REQUEST 将像对待任何专门定义的版本一样对待它。

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

<?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.您可以声明一些"真正真正需要的变量",缺少这些变量会抛出错误页面。

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