无法从PHP脚本中检索会话变量

时间:2015-10-27 19:23:40

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

我有一个表单的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数据库。问题是我想更新Fbprofile列,其中StudEmail等于电子邮件会话变量。这个会话变量在所有其他页面中都能很好地工作,但我似乎无法在我的response.php中检索它。实际发生的是SQL更新有效,但只更新所有没有电子邮件值的行,所以我猜它不是在读取$ email变量。 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

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

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

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

...

function test_function($email) {
    ...
}