【发布时间】:2015-02-05 13:51:10
【问题描述】:
对于这个问题的答案,我有点难过。
我有一个注册表单,如果在检查表单输入时出现问题,我会将消息保存到会话变量,然后检查该会话变量是否包含任何内容,如果有,在我的页面顶部显示输出我调用session_start();,在设置消息时我使用类似$_SESSION['msg'] = "Fill out all the information";
但是我遇到的问题是,这仅在用户登录时有效(即会话已经开始)并且没有会话时 $_SESSION['msg'] 变量没有得到设置。
要检查错误消息,我使用此代码。
if(isset($_SESSION['msg'])){
echo $_SESSION['msg'];
unset($_SESSION['msg']);
}
从页面顶部的代码可以看出,它们之间几乎没有什么区别。但是有一个检查来查看用户是否有一个有效的会话,但是这一切都是根据它的评估方式返回真或假,我已经检查过了,它似乎并没有像我一样导致问题取出来,问题依旧。
谁能解释一下这个问题?
session_start();
include_once("".$_SERVER['DOCUMENT_ROOT']."/includes/Krumo/class.krumo.php");
include_once("".$_SERVER['DOCUMENT_ROOT']."/auth/class_loader.php");
$sessCheck = new userFunc;
if($sessCheck->validSess('bool')){
$sess = true;
}
else{ $sess = false;}
if(isset($_POST['email'])){
if($_POST['email'] != NULL && $_POST['username'] != NULL && $_POST['pass'] != NULL && $_POST['rpass'] != NULL){
$e = preg_replace('#[^a-z0-9_@.-]#i', '', $_POST['email']);
if (!filter_var($e, FILTER_VALIDATE_EMAIL)) {
$_SESSION['msg'] = "Please enter a valid email";
return false;
}
else{
$check = new userFunc;
if($check->userExists($_POST['email'],$_POST['username'])){
$_SESSION['msg'] = "An account with that email or username already exists";
return false;
}
else
{
if(!$check->pswdMatch($_POST['pass'],$_POST['rpass'])){
$_SESSION['msg'] = "Passwords do not match";
return false;
}
$register = new register;
$user = $register->startReg($_POST['username'],$_POST['email'],$_POST['pass']);
}
}
}else
{
$_SESSION['msg'] = "Fill out all the information";
return false;
}
}
【问题讨论】:
-
在顶部(在
sessionStart之后)尝试添加$_SESSION['msg'] = "";,这样你就知道它总是设置.. 但我没有立即看到问题。 -
为什么要将它放在会话中?
-
@dan-klasson 我也这么想,但没那么重要。也许是在某处或某处看到最后一条消息:D
-
看起来像是在尝试 flash 消息传递:mikeeverhart.net/php/session-based-flash-messages
-
它是否重定向回同一页面?或者到不包含
session_start()的其他页面?
标签: php session-variables