【问题标题】:Can't retrieve session variable from PHP script无法从 PHP 脚本中检索会话变量
【发布时间】:2015-10-27 19:23:39
【问题描述】:

我有一个表单的 ajax 发布,这样我就可以从 PHP 返回值,就像它在这里显示的那样:https://jonsuh.com/blog/jquery-ajax-call-to-php-script-with-json-return/。 不过有一点点不同,我的 response.php 脚本是这样的:

<?php
session_start();

$email = $_SESSION['email'];

?>

<?php    
if (is_ajax()) {
    if (isset($_POST["action"]) && !empty($_POST["action"])) { 
        $action = $_POST["action"];
        switch($action) { 
        case "test": test_function(); break;
        }
    }
}

function is_ajax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&   strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

function test_function(){
    $return = $_POST;
    $x = $return["Profile"];

    define('DB_NAME', 'STUDENTS');
    define('DB_USER', 'STUDENTS');
    define('DB_PASSWORD', 'PASSWORD');
    define('DB_HOST','HOST');

    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);       
    $db_selected = mysql_select_db(DB_NAME, $link); 

    $sql = "UPDATE  `STUDENTS`.`Students` SET  `Fbprofile` =  '$x' WHERE  `Students`.`StudEmail` = '$email'  ";

    $return["json"] = json_encode($return);
    echo json_encode($return);
}
?>

如您所见,唯一的区别是我正在更新 SQL 数据库。问题是我想更新 StudEmail 等于电子邮件会话变量的 Fbprofile 列。此会话变量在所有其他页面中都可以正常工作,但我似乎无法在我的 response.php 中检索它。实际发生的情况是 SQL 更新有效,但只更新其中没有电子邮件值的所有行,所以我猜它没有读取 $email 变量。 非常感谢您的帮助。

【问题讨论】:

  • var_dump($_SESSION) 显示什么?此脚本是否与所有其他脚本位于同一子域和文件夹中?为什么你“猜测”它是 $email 变量而不是主动调试它?
  • 我们真的不应该帮你调试自己的代码......
  • 只是你需要声明'global $email'来使用函数内部的外部变量
  • 而不是全局,为什么不在函数参数中传递呢?测试功能($电子邮件)? test_function() 也可以直接与 $_SESSION 一起使用(坏主意,但你可以

标签: php sql ajax sql-update session-variables


【解决方案1】:

这是一个变量范围问题。您将$email 设置在test_function 之外,因此它在函数内部不可见。如果您启用了错误报告,您会看到关于未定义变量的通知。

你应该把它作为参数传递给函数:

    case "test": test_function($email); break;

...

function test_function($email) {
    ...
}

【讨论】:

  • 非常感谢。我非常感谢您的帮助,现在它可以工作了。我现在只编程了不到两个月。我不得不说我对堆栈溢出的一些 cmets 感到相当失望,有一种趋势是取笑那些显然刚刚开始接近这个新世界的人,这很琐碎而且毫无用处,因为这是由于 cmets喜欢你的(酒保),而不是那些让像我这样的人进步的人。再次感谢 G.R.
  • 当我们很多人来到这里时,我们认为这是一个让有经验的程序员互相帮助解决难题的地方。不幸的是,它最终主要是为新手提供基本的编程课程,这可能非常令人沮丧。
猜你喜欢
  • 2011-05-11
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2017-07-21
  • 2018-10-31
  • 2014-12-11
相关资源
最近更新 更多