当我没有更新信息时,会话变量变为null或丢失

时间:2015-08-28 03:43:49

标签: php variables session

在我的页面中,我有:

1. Registration Page
2. Login Page
3. Successful Registration Page
4. Referral Form

在我的注册页面中,用户可以通过此注册。

在我的登录页面中,我有两种类型的用户,申请人员工

在我的成功注册页面中,有一个按钮指向推荐表格。

在我的推荐表格页面中,我有一个模式可以更新用户在注册期间提供的推荐信息。 以下信息是:

 Referrer ID
 Fullname
 Current Position
 ContactID
 Email Address
 MObile Number
 Member Since

如果您在我的网页上创建了一个帐户,无论您是申请人还是员工,如果您成功注册,我的成功注册页面将提示您,一旦您点击按钮转到推荐表格以下信息将根据您在注册期间提供的推荐信息显示在您的推荐信息中。

如果您注册为申请人,则Referrer ID始终设置为 0 ,您可以通过推荐表单页面进行编辑> 或者如果您注册为员工,则Referrer ID基于您在注册期间提供的内容。 示例:

Referrer ID (Allowed to edit if you register as an applicant)
Fullname Sherlock Holmes
Current Position (This has no value and may be edit once you created an account)
ContactID CON12344
Email Address SherlockHolmes@gmail.com
MObile Number +987676758857
Member Since 2014-05-06 04:41:21

这是我遇到的问题。

我创建了一个帐户和成功注册页面提示给我,然后单击按钮转到推荐表单页面来编辑我的信息。我编辑并登出并尝试重新登录,我的信息更新,现在反映我的信息。效果很好。

但是 当我创建一个帐户并提交成功注册页面并单击按钮转到推荐表单页面时,如果我没有编辑我的信息并尝试将其注销并尝试重新登录,我的信息将变为拥有所有空值。像这样,

 Referrer ID 0
 Fullname
 Current Position
 ContactID
 Email Address
 MObile Number
 Member Since

这是不正确的,因为即使我没有编辑我的信息,我的信息应该就是这样。

 Referrer ID 0(You can edit it)
 Fullname Sherlock Holmes
 Current Position (You can edit it)
 ContactID CON12345678
 Email Address sherlockholmes@gmail.com (You can edit it)
 MObile Number +93456789 (You can edit it)
 Member Since 2014-05-06 04:41:21

问题当我不为新创建的帐户编辑我的信息时发生,但是当我在登录之前编辑它时,它没关系。

这是成功注册PHp

<?php
include('../include/dbconnection.php');
include('../include/functions.php');

if(!isset($_SESSION))
{
session_start();
}
$empid = $_SESSION['SESS_EMP_ID'];
$conid = $_SESSION['SESS_CONID'];
$fName = $_SESSION['SESS_FIRSTNAME'];
$lName = $_SESSION['SESS_LASTNAME'];
$contactNo = $_SESSION['SESS_CONTACT_NO'];
$mobile = $_SESSION['SESS_MOBILE'];
$email = $_SESSION['SESS_EMAIL'];
$bday = $_SESSION['SESS_BDAY'];

if($conid == '')
{
echo ("<SCRIPT LANGUAGE='JavaScript'>
    window.location.href='index.php';
    </SCRIPT>");
}

else
{
//Nothing
}
?>     

以下是推荐表单

中的代码
/**** Start Session ****/
session_start();


//Check whether the session variable SESS_EMP_ID is present or not
if(!isset($_SESSION['SESS_EMP_ID']) || (trim($_SESSION['SESS_EMP_ID']) == '')) {
    header("Location: LoginPage.php");
    exit();
}
/**** End ****/

/**** Redirects automatically to index ****/
header("Refresh: 15 * 60; url=index.php");
/**** End ****/

/**** authentication ****/
//require_once('../function/auth_emp.php');
/**** End ****/

$empid = $_SESSION['SESS_EMP_ID'];
$bdate = $_SESSION['SESS_BDAY'];



/**** Database connection ****/
require_once('../include/config.php');
/**** End ****/


include'../GlobalConstants.php';

include_once ('../refer/updateInfo.php');

mysql_select_db($db_name, $con) or die("ERR_COULD_NOT_SEE_DB");
if($empid == 0)
{

$fname = $_SESSION['SESS_FIRSTNAME'];
$lname = $_SESSION['SESS_LASTNAME'];
$bdate = $_SESSION['SESS_BDAY'];
$pos = $_SESSION['SESS_POSITION'];
$empid = $_SESSION['SESS_EMP_ID'];

$qry= "SELECT vtiger_contactdetails.firstname,
          vtiger_contactdetails.contact_no, 
          vtiger_contactscf.cf_703,
          vtiger_contactscf.cf_715, 
          vtiger_contactscf.cf_717,
          vtiger_contactdetails.email,
          vtiger_contactdetails.lastname, 
          vtiger_contactdetails.mobile,
          vtiger_contactdetails.contactid,
          vtiger_crmentity.createdtime
       FROM vtiger_contactdetails 
       INNER JOIN vtiger_contactscf 
       ON vtiger_contactdetails.contactid = vtiger_contactscf.contactid
       INNER JOIN vtiger_crmentity
       ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
       INNER JOIN vtiger_contactsubdetails
       ON vtiger_contactsubdetails.contactsubscriptionid=     vtiger_contactdetails.contactid
       WHERE vtiger_contactdetails.firstname = '".$fname."'
       AND vtiger_contactdetails.lastname =  '".$lname."'
       AND vtiger_contactsubdetails.birthday = '".$bdate."'";   

$result = mysql_query($qry);

}   else
{
$qry= "SELECT vtiger_contactdetails.firstname,
          vtiger_contactdetails.contact_no, 
          vtiger_contactscf.cf_703,
          vtiger_contactscf.cf_715, 
          vtiger_contactscf.cf_717,
          vtiger_contactdetails.email,
          vtiger_contactdetails.lastname, 
          vtiger_contactdetails.mobile,
          vtiger_contactdetails.contactid,
          vtiger_crmentity.createdtime
       FROM vtiger_contactdetails 
       INNER JOIN vtiger_contactscf 
       ON vtiger_contactdetails.contactid = vtiger_contactscf.contactid
       INNER JOIN vtiger_crmentity
       ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
       WHERE vtiger_contactscf.cf_739 = '".$empid."'";

$result = mysql_query($qry);
}
if($result)
{
    if(mysql_num_rows($result)> 0)
    {
        $row = mysql_fetch_assoc($result);
        $contact_no = $row['contact_no'];
        $fname = $row['firstname'];
        $mname = $row['cf_703'];
        $lname = $row['lastname'];
        $mobile = $row['mobile'];
        $pos = $row['cf_715'];
        $program = $row['cf_717'];
        $email = $row['email'];
        $conid = $row['contactid'];
        $memberdate = $row['createdtime'];

    }
}

$erp = "ERP";
/**** Stores the firstname and lastname in the session ****/
$_SESSION['SESS_EMP_ID'] = $empid;
$_SESSION['SESS_CONID'] = $conid;
$_SESSION['SESS_FIRSTNAME'] = $fname;
$_SESSION['SESS_MIDDLENAME'] = $mname;
$_SESSION['SESS_LASTNAME'] = $lname;
$_SESSION['SESS_MOBILE'] = $mobile;
$_SESSION['SESS_EMAIL'] = $email;
$_SESSION['SESS_POSITION'] = $pos;
$_SESSION['SESS_GEN'] =$erp;
$_SESSION['login_time'] = time();




?>

当用户在创建帐户后没有填写信息时,是否有问题传递会话变量? 如果用户编辑并填写所有信息并尝试重新注销并重新登录。看起来没关系并且有效。 但是在用户创建帐户后,如果我没有编辑信息并将其注销并尝试重新登录,则它不会反映这些值。 如果我退出并尝试重新登录,当我没有更新信息时,我不会反映会话的价值。感谢

2 个答案:

答案 0 :(得分:0)

您的代码很容易调试。

尝试逐步测试。

检查此变量 - $ empid

1)当它为0时,尝试在页面上输出整个查询并检查这些条件。

   WHERE vtiger_contactdetails.firstname = '".$fname."'
   AND vtiger_contactdetails.lastname =  '".$lname."'
   AND vtiger_contactsubdetails.birthday = '".$bdate."'"; 

2)如果整个查询输出正确(fname,lname,bdate不为空),则检查结果变量。它应该返回一个对象,它不应该为null。

3)检查ELSE块。特别是这种情况

WHERE vtiger_contactscf.cf_739 = '".$empid."'";

4)如果查询正确(没有空格),请检查结果变量。它必须是一个对象。

答案 1 :(得分:0)

我认为当您注销用户时会出现问题,您可能正在刷新所有会话值,请在此处添加您的注销代码,以便我们检查他们是否有任何原因。

还有另外一个可以尝试解决此问题。

1)当用户成功注册到您的应用程序时,将数据保存到临时表中,其中包含用户信息和未编辑的标记。

2)当用户进入推荐页面时,获取当前登录用户数据并分配到推荐表单。

3)如果提交表单,则更改标志值。

这将帮助您跟踪未更新其推荐表单的用户,并且您也可以在其他某些页面上提示它们,这将对会话产生较少的依赖性,因为当您执行注销时会话最终会被破坏或者由于服务器会话处理变量也会发生,您将无法获得这些信息。希望这会对你有所帮助。