在PHP中更新会话变量

在PHP中更新会话变量,php,forms,session,session-variables,Php,Forms,Session,Session Variables,我正在制作一个基本配置文件页面,检查用户是否登录,如果没有,则创建一个快速电子邮件/密码表单,一旦他们再次提交表单,但设置会话变量,并向用户显示一个简单的问候,确认其工作正常 我的问题是它不工作,它只返回表单而不是登录页面。我看不出哪里出了问题,为什么它不接受新的会话变量。我试图破坏当前会话(不应该存在)并打开一个新会话。。。我不知所措 这是我的密码: // session started at the top of the document if (isset($_SESSION['user

我正在制作一个基本配置文件页面,检查用户是否登录,如果没有,则创建一个快速电子邮件/密码表单,一旦他们再次提交表单,但设置会话变量,并向用户显示一个简单的问候,确认其工作正常

我的问题是它不工作,它只返回表单而不是登录页面。我看不出哪里出了问题,为什么它不接受新的会话变量。我试图破坏当前会话(不应该存在)并打开一个新会话。。。我不知所措

这是我的密码:

// session started at the top of the document

if (isset($_SESSION['userid']) && $_SESSION['userid'] != '') {
$name = $_SESSION['fname'];
$loggedin = TRUE;
}else{
$loggedin = FALSE;

// if the form is submitted then process the form and create session variables
if (isset($_POST['submit'])) {
    $email = sanitizestring($_POST['email']);
    $pword = sanitizestring($_POST['pword']);

    if (isset($email) && $email !='') {
        if(isset($pword) && $pword !=''){

// connect to database and check credentials against whats stored - all works fine
        { 
            // If password matches then we direct them to their profile
            $_SESSION['userid'] = $user['id_login'];
            $_SESSION['fname'] = $user['name_login'];
        }else{
            $error = "email and password did not match";
        }// end check password
    }else{
        $error = 'You have not entered your password';
    }
}else{
    $error = 'You have not provided an email';
} //end if email is set
}// end if submitted

}// end if Session is set

if ($loggedin != TRUE) {

?>
<div id="login">
<form action="#" method="Post">
    <table>
        <tr>
            <td><label for"email">Email</label></td>
            <td><label for="pword">Password</label></td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td><input type="email" name="email"></td>
            <td><input type="password" name="pword"></td>
            <td><input type="submit" name="submit" value="Login"></td>
        </tr>
    </table>
</form>
/// display $error messages here
<?php
}

}else{
echo "hello ".$name;
}// end if user is logged in

session_destroy();

?>
//会话从文档顶部开始
如果(isset($\u会话['userid'])和&$\u会话['userid']!=''){
$name=$\会话['fname'];
$loggedin=TRUE;
}否则{
$loggedin=FALSE;
//如果表单已提交,则处理表单并创建会话变量
如果(isset($_POST['submit'])){
$email=sanitizestring($_POST['email']);
$pword=卫生限制($_POST['pword']);
如果(设置($email)&$email!=''){
如果(isset($pword)&&$pword!=''){
//连接到数据库并根据存储的内容检查凭据-一切正常
{ 
//如果密码匹配,那么我们将引导他们访问他们的个人资料
$\u会话['userid']=$user['id\u login'];
$\会话['fname']=$user['name\u login'];
}否则{
$error=“电子邮件和密码不匹配”;
}//结束检查密码
}否则{
$error='您尚未输入密码';
}
}否则{
$error='您没有提供电子邮件';
}//如果设置了电子邮件,则结束
}//如果提交,则结束
}//如果设置了会话,则结束
如果($loggedin!=TRUE){
?>
电子邮件
密码
///在此处显示$error消息
我把这里的代码弄得一团糟,四处移动提交代码以确保它正确运行,但我就是看不出哪里出了问题

这样做的目的是,如果用户未登录,系统会提示他们输入表单,一旦他们提交表单,表单就会返回到配置文件页面

任何帮助都将不胜感激


谢谢

您确认您的会话是否正常工作了吗?只需做一个小测试页面:

<?php
echo $_SESSION["test"];
$_SESSION["test"] = date("Y-m-d H:i:s");

我认为在验证用户时,您需要将
$loggedin==TRUE
设置为TRUE

$_SESSION['userid'] = $user['id_login'];
$_SESSION['fname'] = $user['name_login'];
添加行:

$loggedin == TRUE;
因此,该块看起来像:

 if(isset($pword) && $pword !=''){

  // connect to database and check credentials against whats stored - all works fine
    { 
        // If password matches then we direct them to their profile
        $_SESSION['userid'] = $user['id_login'];
        $_SESSION['fname'] = $user['name_login'];
        $loggedin == true;
    }else{
    ........(Rest of the code)

代码中的语法错误太多。请检查!此外,请执行var\u转储($\u会话)或print\r($\u会话)检查会话是否确实已被破坏。感谢@ToBe,我已删除了破坏会话,这似乎可以存储会话数据,但由于某些原因,您必须输入两次用户名和密码才能正常工作。有什么想法吗?可能此片段在某个iframe中,您在登录时再次检查r首次登录尝试尚未完成?