所以我一直遇到很多麻烦。有点新的PHP。我正在使用用户帐户的网站上工作,并为特定用户保存数据。它跟踪用户的食物和有效期。
以下是我的表格基本上是如何设置的,以节省空间。
table userinfo(email, password)
table food(name,brand,type,location,expiration, OwnerEmail)
table loggedin(session_id,email)
我有一个看起来像这样的login.php页面,我只放了最重要的部分。
用户按下登录信息后。
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "login")) {
session_start();
$userid = $_POST['email'];
$_SESSION[$userid] = $userid;
$_SESSON[$userid + '-id'] = $userid + $id;
$user=session_id();
date_default_timezone_set('EST');
$hour = date("h") + 1;
$date = date("l jS \of F Y $hour:i:s A");
$insertSQL = sprintf("INSERT INTO loggedin (session_id, email) VALUES (%s, %s)",
GetSQLValueString($user, "text"),
GetSQLValueString($_POST['email'], "text"));
mysql_select_db($database_localhost, $localhost);
$Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());
$insertGoTo = "dashboard.php?";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>
<?php
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['email'])) {
$loginUsername=$_POST['email'];
$password=$_POST['password'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "dashboard.php";
$MM_redirectLoginFailed = "login.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_localhost, $localhost);
$LoginRS__query=sprintf("SELECT email, password FROM userinfo WHERE email=%s AND password=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$LoginRS = mysql_query($LoginRS__query, $localhost) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
这是我的主要dashboard.php,只是它的开头,我将用户的电子邮件连接并设置为变量。
<?php require_once('Connections/localhost.php');
?>
<?php
if(!isset($_SESSION)){
session_start();
mysql_select_db($database_localhost, $localhost);
$index = 0;
mysql_select_db($database_localhost, $localhost);
$log = mysql_query("SELECT email FROM loggedin") or die(mysql_error());
while($cols = mysql_fetch_array($log)){
$value = $cols['email'];
$email[$index] = $value;
$index++;
}
$user=session_id();
$login = "UPDATE loggedin SET session_id='$user' WHERE email='$value'";
$Result1 = mysql_query($login, $localhost) or die(mysql_error());
}
以下是我如何设置我的桌子以供用户查看他们的食物。
<?php
$sql1=mysql_query("SELECT email from loggedin WHERE session_id='$user'");
$sess=mysql_fetch_array($sql1);
$newValue=$sess['email'];
$sql2= mysql_query("SELECT * FROM food WHERE OwnerEmail='$newValue'"); ?>
<div class="table-responsive">
<!--<div id="box3" class="box">-->
<h2 class="sub-header">All Foods</h2>
<table class="table table-striped">
<thead>
<tr>
<th>Food Name</th>
<th>Brand Name</th>
<th>Food Group</th>
<th>Location</th>
<th>Expiration Date</th>
</tr>
</thead>
<tbody>
<?php
$currentYear=date("Y");
$currentMonth=date("m");
$currentDay=date("d");
while($rows = mysql_fetch_array($sql2))
{
$class='';
$year=substr($rows['ExpirationDate'],6,4);
$month=substr($rows['ExpirationDate'],3,2);
$day=substr($rows['ExpirationDate'],0,2);
if($year==$currentYear){
if($month==$currentMonth){
if(($day - $currentDay) <= 3){
$class='expBad';
}
}
}
?>
<tr>
<td><b><?php echo $rows['Name'], $_SESSION['user'] ?></td>
<td><b><?php echo $rows['Brand'] ?></td>
<td><b><?php echo $rows['Type'] ?></td>
<td><b><?php echo $rows['Container'] ?></td>
<td><b><?php echo "<span class=\"$class\">".$rows['ExpirationDate']."</span>" ?></td>
</tr>
<?php
}
?>
我遇到的主要问题是,为了执行添加和删除食物等操作,我正在从登录表中绘制数据。我使用WHERE session_id等于当前会话用户ID的查询从数据库中绘制用户电子邮件。
这是我的主要问题。当用户登录时,让我们说chrome,然后第二个用户从chrome上的另一台计算机登录。包含会话标识的变量将成为第二个用户session_id的值。现在,如果用户拥有自己的唯一会话,则变量应该与他们自己的特定会话相关,但由于某种原因,这两个会话是连接的。因此,第二个用户会话ID将覆盖第一个,如果第一个用户刷新页面,他将显示第二个用户数据。
最终,我需要知道的是,在后续用户登录后,我是否可以获取他们的特定ID或用户名,然后相应地显示他们的信息。他们是否会使用&amp; _GET,&amp; _POST或&amp; _SESSION数组来跟踪这些数据?
对不起,很长的帖子。但是我只是在遇到问题之后继续遇到问题,我猜它是因为我以一种非常不稳定和低效的方式处理它。