【发布时间】:2015-07-04 20:28:45
【问题描述】:
我有一个会话变量,它是一个数组,应该存储不同的用户名。当用户尝试登录时,会根据数组检查用户名,以查看该名称是否存在于数组中。如果在数组中未找到,则将用户重定向到注册页面,用户可以在其中输入用户名和密码。
这个页面,在接受用户名和密码后,应该更新会话数组,以便用户下次尝试登录时,他/她会被重定向到不同的页面。
我可以注册,但我认为每次返回主页时,用户名数组都会刷新以包含 0 个条目。
有什么方法可以让我的数组更持久?
products.php
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Studen Project #6 - M.M.</title>
<link rel="stylesheet" href="mystyles.css" />
</head>
<body>
<h1>Product Listings</h1>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Username: <input type="text" name="username" /><br>
Password: <input type="password" name="password" /><br><br>
Enter a Quantity for Each Product<br><br>
Pencils: <input type="number" name="pencils" /><br>
Notebooks: <input type="number" name="notebooks" /><br>
Folders: <input type="number" name="folders" /><br><br>
<input type="submit" />
</form>
<h2>Dixon Ticonderoga Wood-Cased Pencils</h2>
<h3>$2.88</h3>
<img src="http://ecx.images-amazon.com/images/I/41OAcvBFqXL.jpg" alt="pencil" />
<p>The World's Best Pencil with an exclusive #2 HB graphite core formula provides extra smooth performance</p>
<h2>Five Star Stay-Put Pocket Folder</h2>
<h3>$5.49</h3>
<img src="http://ecx.images-amazon.com/images/I/71HaaqlhilL._SL1280_.jpg" alt="folder" />
<p>Durable plastic folder helps keep sheets protected and in one place; great for reports, projects, as a take-home folder and for storage</p>
<h2>Five Star Wirebound Notebook</h2>
<h3>$18.98</h3>
<img src="http://ecx.images-amazon.com/images/I/61NgdQwSjIL._SL1000_.jpg" alt="notebook" />
<p>Five-subject plastic cover notebook has 200 college-ruled, 11 x 8.5 inch, 3-hole punched sheets</p>
<?php
$usernames = array();
$_SESSION["usernames"];
$_SESSION["quantity_total"];
$_SESSION["username"];
$_SESSION["pencils"];
$_SESSION["folders"];
$_SESSION["notebooks"];
if($_SERVER["REQUEST_METHOD"] === "POST") {
$_SESSION["usernames"] = $usernames;
$_SESSION["username"] = $_POST["username"];
$_SESSION["pencils"] = $_POST["pencils"];
$_SESSION["folders"] = $_POST["folders"];
$_SESSION["notebooks"] = $_POST["notebooks"];
if(!in_array($_SESSION["username"], $_SESSION["usernames"])) {
header("Location:registration.php");
exit();
} else {
$_SESSION["quantity_total"] = $_SESSION["pencils"] * 2.88 +
$_SESSION["folders"] * 5.49 + $_SESSION["notebooks"] * 18.98;
header("Location:preview.php");
exit();
}
}
?>
</body>
</html>
registration.php
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Student Project #6 - M.M.</title>
<style>
body {
background-color: lightgreen;
margin: auto;
width: 75%;
text-align: center;
}
h1 {
color: blue;
text-decoration: underline;
}
img {
width: 100px;
height: 100px;
}
form {
padding: 5px;
background-color: lightblue;
font-weight: bold;
font-family: Arial;
}
</style>
</head>
<body>
<h1>Register Here!</h1>
<img src="http://0.media.dorkly.cvcdn.com/36/35/6603dc5a9292104b44c349b85b5aaf7a-5-crazy-fan-theories-that-make-total-sense.jpg"
alt="thumbsup"><br>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" />
</form>
<?php
if($_SERVER["REQUEST_METHOD"] === "POST") {
array_push($_SESSION["usernames"], $_POST["username"]);
header("Location: products.php");
}
?>
</body>
</html>
【问题讨论】:
-
你自己调试过吗?预计提问者所做的不仅仅是将一堵代码墙粘贴到问题中。如果您看到一个特定的、可重现的问题,您可以将其简化为以前没有被问过的最小示例,那么就是提出问题的时候了。 Stack Overflow绝不应该是您首先尝试的地方。
-
感谢您提供的所有有用信息。是的,我已经完成了调试,但我是 PHP 新手,不太确定发生了什么。我在这个论坛上发帖是希望得到指导,而不仅仅是被告知要“更加努力”。
-
您可能需要阅读the how to ask guide 了解更多信息。
-
我可能是错的,但是从您的介绍解释来看,并且没有查看您的代码,您似乎完全偏离了您想要做什么的主题。每个“已连接”用户都存在一个会话(即使它不是真正的连接),您可以在其中保存有关 此 连接的数据,以及您为其服务的连续页面。另一方面,您谈到连续用户的登录:这意味着它将存在与用户一样多的不同会话!会话不是保存和检索关于几个用户的数据的地方。对于你想要的,使用数据库表。