我是php新手,我想添加一个功能,每当用户填写表单并登录时,php代码运行完全正常但刷新页面后用户必须再次填写表单。我不知道代码,也不知道进一步的知识。我尝试使用谷歌搜索,但我只看到这些解决方案:
header(refresh:5,url:url); 要么 元标记
自动刷新,但在单击刷新按钮后不会刷新。
这是我的PHP代码:
<html>
<head>
<link rel="stylesheet" type="text/css" href="services.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap-css/bootstrap.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap-3.3.5-dist/css/bootstrap.min.css">
<script type="text/javascript" src="validate.js"></script>
<style>
a{
color: dodgerblue;
}
a:hover{
color: dodgerblue;
font-size: 101%;
}
span{
font-size: 110%;
line-height: 8px;
font-style: bold;
margin-left: 50px;
}
body{
background-color: #F0F0F0 ;
}
button{
margin-left: 15px;
}
</style>
</head>
<body link="slateblue">
<div id="LogIn"><b>Log In</b></div><br>
<form method="post" onsubmit="return logInPass()" action="log.php">
<div class="col-xs-4"/>
<label for="usr">Email:</label>
<input id="usrEmail" name="usrEmail" type="email" class="form-control" size="25%" placeholder="sample@example.com"/>
</div>
<br><br><br><br>
<div id="PasswordField" class="col-xs-4"/>
<label for="u_pswd">Password:</label>
<input id="u_pswd" type="password" class="form-control" size="25%" placeholder="Enter alteast 8 characters" />
</div>
<br><br><br><br>
<button id="submit" name="checkout" class="btn btn-primary" type="submit" value="submit">Log In</button>
</form>
<br><br>
<a href="SignUpForm.html" target="form"><span>Not a part of GameRangers? Click here for Sign Up!</span></a>
<br>
</body>
</html>
<?php
echo "<style>body{font-family: segoe ui; font-size: 110%;}</style>";
session_start();
$_SESSION['username'] = $_POST['usrEmail'];
echo"Welcome ".$_SESSION['username']."<br><br>";
echo "Today is ".date("Y-m-d")."<br>".date("h:i:sa")."<br>";
?>
答案 0 :(得分:1)
首先,您在标题之前输出session_start();
的位置。
将其作为第一行放在您的<?php
开头标记下,并且您在$SESSION
和$SESSION['username']
中错过了下划线,它是superglobal
那应该是$_SESSION['username']
使用错误报告后,会发出未定义变量的通知。
确保$_POST['usrEmail']
也包含一个值,并且该元素具有相同的name属性,并且会话在所有页面内使用会话启动,并且没有现在的拼写错误。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
如果要在表单中保留会话值,请使用三元运算符作为输入:
<input type="text" name= "usrEmail" id="usrEmail" value="<?php echo !empty(htmlspecialchars($_SESSION['username'])) ? htmlspecialchars($_SESSION['username']) : ''; ?>">
...并将相同的方法应用于其他表单输入。
检查会话是否已设置且不为空。
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_SESSION["userName"]) && !empty($_SESSION["userName"]) )
{
// do something
}
else{
// do something else
}
答案 1 :(得分:0)
使用SESSION或COOKIES存储登录状态
成功登录后,设置会话变量或cookie。
然后检查会话变量或cookie是否为isset并且是意图值,然后将用户保留在页面上。否则,重定向到登录。
同时将session_start()保留在页面的开头。
编辑以明确OP
在页面开头添加session_start()
。验证用户名和密码后,如果是现有用户,请使用以下代码设置会话。
$_SESSION['u_name'] = $_POST['usrEmail'];
否则,重定向到登录页面。
然后在所有用户特定页面(只有登录用户可访问的页面)之上粘贴以下代码。
session_start();
if(!isset($_SESSION['u_name']))
{
header('location:login.php?redirect='.$_SERVER['REQUEST_URI']);
exit;
}
希望这会有所帮助。
答案 2 :(得分:0)
使用sessions
:
session_start(); // in top of PHP file
...
$_SESSION["userName"] = $userName;
页面
session_start();
if(isset($_SESSION["userName"]) && $_SESSION["userName"] != ''){
//redirect to logged in page
}
答案 3 :(得分:0)
因为您正在使用会话来存储用户名。这个会话可以在if条件中使用,就像我在这里使用的那样:
<div id="nav1">
<?php session_start();
if($_SESSION['id']=='')
{
?>
<font style="font-size:16px; font-weight:bold; color:#063443;">Welcome, Guest <a href="Login.php" >SignIn</a></font>
<?php }
else
{ ?>
<font style="font-size:16px; font-weight:bold; color:#063443;">Welcome, <?php echo $_SESSION['name'];?> <a href="signout.php" >SignOut</a> <a href="accinfo.php">My Account</a></font>
<?php }
?></div>
这里我在session [id]中存储了用户ID,这将成为显示用户登录的条件。