【问题标题】:insert $_SESSION['MM_Username'] in to log message插入 $_SESSION['MM_Username'] 以记录消息
【发布时间】:2012-05-20 11:37:32
【问题描述】:

这里的第一篇文章 - 我已经学习 php 和 mysql 一个月左右了。

我正在尝试将会话“MM_Username”发布到日志注释中。 所以它显示为“由用户名存档”

我认为如果我将 lognote 值设置为“由”存档。$_SESSION['MM_Username']。“' 我会得到我想要的结果。显然不是。

我做错了什么? 我的代码如下。

谢谢

    if ((isset($_GET['divisionid'])) && ($_GET['divisionid'] != "")) {


  $logarchiveSQL = sprintf("INSERT INTO log (logaction, logdivisionid, lognotes) VALUES ('Division Archived', %s, 'archived by " . $_SESSION['MM_Username'] . "')",
                       GetSQLValueString($_GET['divisionid'], "int"));

  mysql_select_db($database_connect, $connect);
  $Result2 = mysql_query($logarchiveSQL, $connect) or die(mysql_error());


  $updateGoTo = "../divisions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));}

【问题讨论】:

  • 我没有收到错误,查询有效 - 我只是无法让查询将 SESSION['MM_Username'] 发布到 lognotes 值中

标签: php mysql session insert


【解决方案1】:

你记得把它放在 session_start();在尝试访问您的会话之前?

【讨论】:

    【解决方案2】:

    你得到了什么结果?查询是否实际执行? 当语句用双引号“”括起来时,请尝试在 { }

    中引用变量
       $logarchiveSQL = sprintf("INSERT INTO log (logaction, logdivisionid, lognotes) VALUES ('Division Archived', %s, 'archived by {$_SESSION[MM_Username]} ')",
                           GetSQLValueString($_GET['divisionid'], "int"));
    

    【讨论】:

    • 对不起,是的,quey正在执行,但我得到的结果不包括会话设置的用户名
    【解决方案3】:

    由于您没有提供错误,我检查了代码并没有发现任何严重的编码。不过,一些小建议如下:

    <?Php
    if ((isset($_GET['divisionid'])) && ($_GET['divisionid'] != "")) {
    
    
        $logarchiveSQL = sprintf("INSERT INTO log (logaction, logdivisionid, lognotes) VALUES ('Division Archived', %d, 'archived by %s')",
            GetSQLValueString($_GET['divisionid'], "int"), 
            $_SESSION['MM_Username']);
    
        mysql_select_db($database_connect, $connect);
        $Result2 = mysql_query($logarchiveSQL, $connect) or die(mysql_error());
    
    
        $updateGoTo = "../divisions.php";
        if (isset($_SERVER['QUERY_STRING'])) {
            $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
            $updateGoTo .= $_SERVER['QUERY_STRING'];
        }
        header(sprintf("Location: %s", $updateGoTo));
        exit;
    }
    ?>
    
    • 您应该分别对 INT 和 FLOAT 值使用 %d 或 %f。
    • 既然您使用的是 sprintf,为什么不使用另一个 %s 来放置 SESSION 变量?
    • 您应该在每个 header() 调用之后放置一个 EXIT 以确保没有 程序逻辑转移后执行此页面的更多内容 到另一个页面。
    • PHP 区分大小写,因此建议您检查大小写 的 SESSION 变量与此处使用的变量。

    最终会感谢您所面临的错误!

    【讨论】:

    • 感谢您的提示,我将在系统的其余部分应用它们。会话用户名仍未发布到 lognote 值中。我得到的结果是“Division Archived by 20th May 2012 - 13:10 pm”
    • 如果您检查/搜索代码以查找 $_SESSION['MM_Username']=,您将找到一个赋值操作,该操作使用您访问该值时在此处设置的日期/时间值更新该会话变量。
    • 抱歉,忽略日期 - 它是查询运行时更新的时间戳值
    • 那么您的会话变量要么未设置,要么设置为空值。您可以在代码执行之前检查分配操作以检查是否相同。
    【解决方案4】:

    解决了!

    感谢大家的帮助!

    我没有声明 session_start,我忘记了它是在我的安全包含文件中定义的。

    我还必须创建一个部门记录集

        session_start();
    
    $colname_division = "-1";
    if ((isset($_GET['divisionid'])) && ($_GET['divisionid'] != "")) {
          $colname_division = $_GET['divisionid'];
    
    mysql_select_db($database_connect, $connect);
    $query_division = sprintf("SELECT * FROM division WHERE divisionid = %s", GetSQLValueString($colname_division, "int"));
    $division = mysql_query($query_division, $connect) or die(mysql_error());
    $row_division = mysql_fetch_assoc($division);
    $totalRows_division = mysql_num_rows($division);
    
    
    // ADD LOG DIVISION REINSTATED
        $logarchiveSQL = sprintf("INSERT INTO log (logaction, logdivisionid, lognotes) VALUES ('Reinstated', %d, '" . $row_division['division'] . " reinstated by " . $_SESSION['MM_Username'] . "')",
                        GetSQLValueString($_GET['divisionid'], "int")); 
    
        mysql_select_db($database_connect, $connect);
        $Result1 = mysql_query($logarchiveSQL, $connect) or die(mysql_error());
    
    // MESSAGE USERS DIVISION REINSTATED
        $messageinsertSQL = sprintf("INSERT INTO messages (message) VALUES ('The division " . $row_division['division'] . " has been reinstated by " . $_SESSION['MM_Username'] . " you may now select this division')",
                        GetSQLValueString($_GET['divisionid'], "int")); 
    
        mysql_select_db($database_connect, $connect);
        $Result4 = mysql_query($messageinsertSQL, $connect) or die(mysql_error());
    
    // UPDATE DIVISION TO REINSTATED
        $divisionarchiveSQL = sprintf("UPDATE division SET divisionarchive=0 WHERE divisionid=%s",
                        GetSQLValueString($_GET['divisionid'], "int"));
    
        mysql_select_db($database_connect, $connect);
        $Result3 = mysql_query($divisionarchiveSQL, $connect) or die(mysql_error());
    
    // REDIRECT
        $updateGoTo = "../divisions.php";
            if (isset($_SERVER['QUERY_STRING'])) {
                $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
                $updateGoTo .= $_SERVER['QUERY_STRING'];
            }
        header(sprintf("Location: %s", $updateGoTo));
    
        mysql_free_result($division);
        exit;
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 2019-09-14
      • 2011-01-08
      • 2021-05-17
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多