我的问题是,我们如何检查 $_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.您可以声明一些"真正真正需要的变量",缺少这些变量会抛出错误页面。
但是,如果你在这条路上走得更远,你最好研究一些更高层次的框架。