【问题标题】:New $_SESSION variable not created after query?查询后未创建新的 $_SESSION 变量?
【发布时间】:2013-10-18 01:38:19
【问题描述】:

我正在尝试构建一个登录过程,通过使用 $_SESSION 变量,用户的登录凭据被存储并用于在屏幕上显示他们来自数据库的相关数据(即他们只会看到学校数据他们工作)。

   <?php    
session_start();

if(!isset($_SESSION['Initials'], $_SESSION['Surname']))
{

 $host = "xxx";
 $username = "xxx";
 $password = "xxx";
 $database_name = "xxx";
 $table_name = "xxx";

 mysql_connect($host, $username, $password) OR die("Can't  
 connect");
 mysql_select_db($database_name) OR die("Can't connect to 
 Database");

 $query = "SELECT Class FROM $table_name WHERE Initials = '". 
 $_SESSION['Initials']."' AND staff LIKE '%".$_SESSION['Surname']."'";
 $result = mysql_query($query);
 $class = mysql_fetch_array($result);
 $count = mysql_num_rows($result);

 if($count === NULL)
 {
  echo "ERROR";
 }
  else
  {
  $_SESSION['Class'] = $result;
  echo "Class added to sessions";
  }
}
?>

通过为 if 语句添加正确的括号,可以轻松解决查询无法识别会话变量的最初问题。我在这里出现的下一个问题是,即使查询应该是成功的(当 $count 为 FALSE 或 NULL 时,我没有收到一条错误消息说“错误”)它没有将结果数组创建到新会话中,因为当我在新页面上打印会话数组时,它仍然只保留“姓名首字母”和“姓氏”会话。

我需要对我的查询或查询后流程进行哪些更改,以便将该数组(因为它必然会抛出多个结果)放入一个新会话中?

非常感谢您对我最初的问题的回答!

【问题讨论】:

  • 您的代码块周围缺少“if”语句的大括号。这意味着只有下一条语句是有条件的——其余的无论如何都会执行。
  • 不敢相信我错过了这么一个小细节!!!非常感谢,查询中的变量不再识别,但不幸的是它仍然没有在最后创建新的会话(类)......(这与$count参数有什么关系吗?
  • 这似乎与您的数据库调用是否成功有关。我建议不要过多使用 mysql_* 函数,因为它们已经过时并且很快就会从 php 中删除,顺便说一下 - 使用 mysqli 或 PDO。
  • 我已经设法弄清楚问题出在哪里(最终) - 由于时间不够长,我不允许写下我的答案,但一旦我能够做到,我会这样做的人可以看到 - 感谢有关 mysql 的提示!

标签: php mysql sql session


【解决方案1】:

我找到了答案 - 结果是我没有将会话变量之一视为正确的数组,因此无法正确加载。我在下面添加了我的脚本,以便将来有类似问题的人可以将其用作参考点:

<?php

 session_start();


 // Server Details //
 $host = "---";
 $username = "---";
 $password = "---";
 $database_name = "---";
 $table_name = "---";


 // Connect Command //
 mysql_connect($host, $username, $password) OR die("Can't  
 connect");
 mysql_select_db($database_name) OR die("Can't connect to 
 Database");


 // Query to call up the unique school name //
 $query_school = mysql_query("SELECT DISTINCT School FROM $table_name 
 WHERE Initials = '".$_SESSION['---']."'
 AND staff LIKE '%".$_SESSION['---']."'") or die( mysql_error());
 $result_school = mysql_result($query_school, 0);


 // Query to call up the unique centre no //
 $query_centreno = mysql_query("SELECT DISTINCT CentreNo FROM 
 $table_name WHERE Initials = '".$_SESSION['---']."'
 AND staff LIKE '%".$_SESSION['---']."'") or die( mysql_error());
 $result_centreno = mysql_result($query_centreno, 0);


 // The newly created sessions for school info //
 $_SESSION['---'] = $result_school;
 $_SESSION['---'] = $result_centreno;


 // Query to call up the array of classes //
 $query_class = mysql_query("SELECT Class FROM $table_name WHERE 
 Initials = '".$_SESSION['---']."'
 AND staff LIKE '%".$_SESSION['---']."'") or die( mysql_error());
 $query_class__array = array();
 while($row = mysql_fetch_assoc($query_class))
 $query_class_array[] = $row;

 $_SESSION['---'] = $query_class_array;

?>

【讨论】:

    【解决方案2】:
    if(!isset($_SESSION['Initials'], $_SESSION['Surname'])) {
    // code
    }
    

    你需要 { } 括号

    if(!isset($_SESSION['姓名首字母'], $_SESSION['Surname']))

    $host = "xxxxx"; $用户名 = "xxxxx"; $password = "xxxxx";

    if(!isset($_SESSION['Initials'], $_SESSION['Surname'])) {
    
    $host = "xxxxx";
    }
    $username = "xxxxx";
    $password = "xxxxx";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2021-01-01
      • 2018-02-27
      • 2011-10-29
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多