我的问题是,我们如何在$ _POST中检查已发布变量的值,而无需定义它们,如代码所示。
if ($_SESSION["Admin"]=="" AND $_REQUEST[act]!="show_login" AND
$_REQUEST[act]!="chk_login" ) { #not logged in show_login();
return;
我收到了这些错误,
答案 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.你可能会声明一些“真正需要的变量”,其缺席会抛出一个错误页面。
但是,如果你在这条路上走得更远,你最好建议你去研究更高层次的框架。