通过引用电子邮件,ID等来从我的数据库中检索特定用户信息的更好方法

时间:2014-04-05 20:08:10

标签: php sql session user-accounts

所以我一直遇到很多麻烦。有点新的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数组来跟踪这些数据?

对不起,很长的帖子。但是我只是在遇到问题之后继续遇到问题,我猜它是因为我以一种非常不稳定和低效的方式处理它。

0 个答案:

没有答案