在调用unset之前未显示PHP会话变量
基本上,我有以下代码,目前运行良好,正如预期的那样:在调用unset之前未显示PHP会话变量,php,session,echo,unset,Php,Session,Echo,Unset,基本上,我有以下代码,目前运行良好,正如预期的那样: if ( isset($_SESSION['message']) ) { echo '<p class="user_message">'.$_SESSION['message'].'</p>'; //unset( $_SESSION['message'] ); } if(isset($\u会话['message'])) { 回显“”.$\u会话['message']”。; //取消设
if ( isset($_SESSION['message']) )
{
echo '<p class="user_message">'.$_SESSION['message'].'</p>';
//unset( $_SESSION['message'] );
}
if(isset($\u会话['message']))
{
回显“
;
//取消设置($_会话['message']);
}
如您所见,unset()已被注释掉。我要做的是在会话消息发出回声后将其取消设置。但是,当我在没有注释的情况下运行这段代码时,会话变量根本就没有回显
非常感谢
编辑:
感谢您的回复,但是此解决方案不起作用,并返回与我最初尝试相同的结果。以下是定义会话消息的代码:
$_SESSION['message'] = "";
// We know user email exists if the rows returned are more than 0
if ( $result->num_rows > 0 ) {
$_SESSION['message'] = $_SESSION['message'].'User with this email already exists!<br />';
}
// Validate email address
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$_SESSION['message'] = $_SESSION['message'].'Email address is invalid, please try again!<br />';
}
// Validate Referral code
if ( $refby != "" ) {
if ( (count_digit($refby) > 0 && count_digit($refby) < 6) || count_digit($refby) > 6 ) {
$_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
} elseif ( !is_numeric($refby) ) {
$_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
}
$\u会话['message']=”;
//我们知道,如果返回的行数超过0,则存在用户电子邮件
如果($result->num_rows>0){
$\u会话['message']=$\u会话['message'.'具有此电子邮件的用户已存在!
;
}
//验证电子邮件地址
如果(!filter_var($email,filter_VALIDATE_email)){
$\u会话['message']=$\u会话['message'.'电子邮件地址无效,请重试!
;
}
//验证转介代码
如果($refby!=“”){
如果((计数位数($refby)>0和计数位数($refby)<6)|计数位数($refby)>6){
$\u会话['message']=$\u会话['message'.'引用代码无效!
;
}elseif(!是数字($refby)){
$\u会话['message']=$\u会话['message'.'引用代码无效!
;
}
}
//验证密码长度
如果(计数位数($\u POST['password'])小于6){
$\u会话['message']=$\u会话['message'.'密码无效,必须超过6个字符!
;
}
//验证已确认的密码
如果($\u POST['password']!=$\u POST['confirm\u password'])){
$\u会话['message']=$\u会话['message'.'您的密码不匹配!
;
}
if(计数位数($num1)>2 |计数位数($num2)>2 |计数位数($num3)>2 |计数位数($num4)>2 |计数位数($num5)>2){
$\u会话['message']=$\u会话['message'.'请选择您的幸运号码!
;
}
如果($\会话['message']!=“”){
标题(“位置:#注册内容”);
但是,我不明白在取消设置会话变量之前,代码是如何完美工作的?即使在取消设置会话变量之前,内容是回音的
非常感谢您可以使用以下方法:
if ( isset($_SESSION['message']) )
{
$message = $_SESSION['message'];
echo '<p class="user_message">'.$message.'</p>';
unset( $_SESSION['message'] );
}
if(isset($\u会话['message']))
{
$message=$\会话['message'];
回显“
”;
取消设置($_会话['message']);
}
它将打印数据,并在以后取消设置
另外,请记住在脚本开始时调用
会话\u start()
。任何感兴趣的人都可以这样做
发生这种情况是因为脚本继续运行,不确定它是如何工作的,但基本上一旦删除会话变量,脚本就不能再引用它了
一旦在脚本中取消设置会话变量,则需要退出(0)。这可以解决问题,并且会话变量已取消设置,但是在取消设置之前,脚本仍会回显会话变量的内容。如果仅运行该代码,它将不会显示,因为没有任何设置值为
$\u session['message']
isset($\u会话['message'])
不检查会话中是否有任何值,只检查其是否已设置。它可以同时设置为空。您能提供更多代码吗?这一点的原因是什么?何时/如何设置消息会话变量?仅添加此代码无法给出正确答案更多代码谢谢,我可以确认消息变量为holds数据,如果我从原始代码中删除unset(),脚本将按应有的方式执行。唯一的问题是消息变量仍然设置为保留错误。
// Validate password confirmed
if ( $_POST['password'] != $_POST['confirm_password'] ) {
$_SESSION['message'] = $_SESSION['message'].'Your passwords do not match!<br />';
if ( count_digit($num1)>2 || count_digit($num2)>2 || count_digit($num3)>2 || count_digit($num4)>2 || count_digit($num5)>2 ) {
$_SESSION['message'] = $_SESSION['message'].'Please select your lucky numbers!<br />';
}
if ( $_SESSION['message'] != "" ) {
header("location: #register_content");
if ( isset($_SESSION['message']) )
{
$message = $_SESSION['message'];
echo '<p class="user_message">'.$message.'</p>';
unset( $_SESSION['message'] );
}