【问题标题】:session variable getting null or lost when I didn't update information当我没有更新信息时,会话变量变为空或丢失
【发布时间】:2015-08-28 03:43:48
【问题描述】:

在我的页面中,我有:

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

在我的注册页面,用户可以通过这个注册。

在我的登录页面中,我有两种类型的用户,ApplicantEmployee

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

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

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

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

如果您注册为申请人,您的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();




?>

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

【问题讨论】:

    标签: php variables session


    【解决方案1】:

    您的代码易于调试。

    尝试一步一步测试。

    检查这个变量 - $empid

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

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

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

    3) 检查 ELSE 块。尤其是这种情况

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

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

    【讨论】:

    • 您好。我正确输出查询。但是当我没有更新信息时仍然得到空值。
    • 你能把这个文件中的代码发布到include_once ('../refer/updateInfo.php');吗?了解代码中正在发生的事情的全貌。
    【解决方案2】:

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

    对于这个问题,您可以尝试另一种方法。

    1) 当用户成功注册到您的应用程序时,将数据与用户信息以及未编辑标志一起保存到临时表中。

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

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

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

    【讨论】:

    • 谢谢让我这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2011-04-15
    • 2014-08-23
    • 2011-12-05
    相关资源
    最近更新 更多