我已经创建了一个工作会话(我可能会在这里添加帮助)并且我已经设法让它在多个文件中存储变量而没有任何问题。
当$ username未填写时,会提示用户提交其用户名,并在提交$ username时分配用户姓名的值,表单将替换为文本,不再提示用户输入用户名,理论上。
这是我现在的代码:
<?php
session_start();
?>
<header>
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="style/main.css">
<title>webshop</title>
</header>
<div id="LogIn">
<?php
if(isset($_SESSION['username'])){
echo 'Current session username: '.$_SESSION['username'];
echo '<br /><a href="logout.php">Destroy current session</a>';
} else {
?>
<form class="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="form1">
<fieldset>
<ul>
<p>Please enter your username to continue to the webshop.</p>
<label for="name">User Name:</label><span><input type="text" name="username" placeholder="User Name"
class="required" role="input"
aria-required="true"/></span>
<input class="submit transparentButton" value="Next" type="submit" name="Submit"/>
</ul>
<br/>
</fieldset>
</form>
<?php
if (isset($_POST['Submit'])) {
$_SESSION['username'] = $_POST['username'];
}
}
?>
</div>
<a href="cart.php">cart</a><br />
<a href="index.php">index</a>
我遇到的问题是,一旦用户在表单中输入用户名并点击“下一步”,页面就会重新加载,表单仍然存在。然后,如果您刷新该页面,它将使用文本替换表单,并将会话变量$ username解析为纯文本,并带有注销链接(session_destroy())。
我的问题是为什么我必须刷新页面才能正确显示会话变量?是否与if语句有关?
提前致谢。
答案 0 :(得分:6)
你只是有一个逻辑/排序问题。
移动当前位于表单下方的这段代码:
if (isset($_POST['Submit'])) {
$_SESSION['username'] = $_POST['username'];
}
到文件的顶部,就在session_start()
的正下方,它会按照您的意图行事。
现在编写代码的方式,会在表单显示之后才设置会话变量。您希望在窗体显示之前设置会话变量(如果实际上设置了$ _POST用户名)。