0

我的问题是,我们如何检查 $_POST 中发布的变量中的值,而不像您在代码中看到的那样定义它们。

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

我收到这些错误,

  • 未定义索引:在第 6 行的 F:\xampp\htdocs\shangloo\admin\index.php 中操作
  • 未定义索引:第 6 行 F:\xampp\htdocs\shangloo\admin\index.php 中的 Admin
4

3 回答 3

2

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

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

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

于 2012-07-02T22:43:12.293 回答
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 将像对待任何特定定义的版本一样对待它。

于 2012-07-02T22:49:08.150 回答
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. 你可能会声明一些“真正需要的变量”,它们的缺失会抛出一个错误页面。

但是,如果您要在这条路上走得更远,最好建议您研究一些更高级别的框架。

于 2012-07-02T22:54:18.180 回答