我正在创建一个基本的个人资料页面,用于检查用户是否已登录,如果不是,则会创建一个快速的电子邮件/密码表单,一旦他们再次提交表单流程但设置了Session变量和向用户显示一个简单的问候语,确认它有效。
我遇到的问题是它无法正常工作,只返回表单而不是登录页面。我无法看到这出错的地方以及为什么它不会接受新的会话变量。我试图破坏当前的会话(不应该存在)并开启一个新会议......我不知所措。
这是我的代码:
// 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> </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();
?>
我已经搞砸了这里的代码,移动提交代码试图确保它正确运行但我无法看到这出错的地方。
目标是,如果用户未登录,则会在提交表单时提示他们返回到个人资料页面。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
您确认您的会话确实在运行吗?只需做一个小测试页面:
<?php
echo $_SESSION["test"];
$_SESSION["test"] = date("Y-m-d H:i:s");
您可能还需要执行session_start()
,具体取决于您的PHP配置。
如果多次调用,这应显示您之前调用该页面的日期时间。
此外,您的代码显示您在代码中将正常未解析的HTML与PHP代码混合在一起。确保在执行任何输出之前完成对会话数据的所有更改。 PHP无法在任何输出后存储您的会话数据。
另外,不要破坏你的会话。这当然会杀死任何会话数据。只需删除此行即可。如果要注销并希望清除任何存储的会话数据,则只需执行此操作。
答案 1 :(得分:0)
我认为您需要在验证用户时生成$loggedin == TRUE
。喜欢After the line
$_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)