0

我刚刚开始掌握在 mysql_ 上使用 PDO,我目前正在将所有 mysql_ 函数转换为 PDO。我遇到的问题是我完全被这些功能难住了。这样做的目的是从登录时创建的 $_SESSION 中获取 user_id,并使用该 user_id 从数据库中返回他们的数据。但是,我收到了错误:

未定义变量:user_data

每次我尝试检查某事是否为真时,例如如果 admin = 1。这是 user_data 函数:

function user_data($user_id) {
    global $con;
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = "SELECT $fields FROM `users` WHERE `user_id` = $user_id";
        $result = $con->prepare($data);
        $result->execute();
        $user_data = $result->fetch();

        return $user_data;
    }
}

如果banner = 1,这段代码应该调用该函数并销毁会话:

if (logged_in() === true) {
    $session_user_id = $_SESSION['user_id'];
    $user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'email', 'password_recovery', 'moderator', 'admin');
    if (user_banned($user_data['username']) === true) {
        session_destroy();
        header('Location: pts.php');
        exit();
    }
}

这是我尝试使用 $user_data 变量的示例:

<?php if ($user_data['moderator'] == 1)

如果这很难理解,我深表歉意,因为我在编码方面是个菜鸟,而且我不是特别擅长解释事情。如果您需要更多代码,请询问,我很乐意提供。

谢谢大家。

4

2 回答 2

3

如果用户登录,您只定义 $user_data。您需要确保 $user_data 在您尝试访问它之前存在。

if (!empty($user_data) && $user_data['moderator'] == 1)
于 2013-07-03T19:46:04.150 回答
0

Your problem is your inexplicable use of:

$func_num_args = func_num_args();
$func_get_args = func_get_args();

When your function takes one and only one argument.

And then the code inside this if block:

if ($func_num_args > 1) {
  ...
  return $userdata
}

Will never execute. So in your main execution calling $var = user_data(...); PHP implicitly assigns $var as NULL since there was no return statement, and then your code generates an undefined index error later.

于 2013-07-03T20:29:51.160 回答