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;
    }
}

このコードはその関数を呼び出し、bann = 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

あなたの問題は、あなたの不可解な使用です:

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

関数が引数を 1 つだけ取る場合。

そして、このifブロック内のコード:

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

決して実行されません。そのため、return ステートメントがなかったため、メインの実行で PHP を呼び出すと暗黙的に asが$var = user_data(...);割り当てられ、コードは後で未定義のインデックス エラーを生成します。$varNULL

于 2013-07-03T20:29:51.160 に答える