未定义索引:user_id。其中,user_id 是 session 变量

Undefined index: user_id. Where, user_id is session variable

我正在尝试注册用户。注册用户后直接登录。所以基本上我想马上注册就开始session

但是我无法这样做,因为 session 变量没有设置!这让我很头疼:(

请帮帮我..

这里是插入用户的代码table:

// Add register user 
if(isset($_POST["register_btn"]))
 {
    extract(array_map("test_input", $_POST));
    $md5pass=md5($password);

    $m->set_data('full_name',$full_name);
    $m->set_data('gender',$gender);
    $m->set_data('email',$email); 
    $m->set_data('mobile',$mobile);
    $m->set_data('password',$md5pass);
    $m->set_data('created_date',$date);
    $m->set_data('updated_date',$date);

    $a1= array ('role_id'=> 2,
                'full_name'=> $m->get_data('full_name'),
                'gender'=> $m->get_data('gender'),
                'email'=> $m->get_data('email'),
                'mobile'=> $m->get_data('mobile'),
                'password'=> $m->get_data('password'),
                'created_date' => $m->get_data('created_date'),
                'updated_date' => $m->get_data('updated_date'));

    $last_auto_id=$d->last_auto_id("users");
    $res=mysqli_fetch_array($last_auto_id);
    $user_id=$res['Auto_increment'];

    // inserting into users table
    $insert=$d->insert('users',$a1);

    if($insert>0)
    {
        // I am starting session here
        $_SESSION['user_id']=$user_id;
        header("location:account.php?msg=Your account has been created.");
    }
    else {
        header("location:account.php?msg=Error.");
    }
 }

现在,如果我尝试在下面的代码中打印 $_SESSION['user_id']:

<?php
    extract(array_map("test_input", $_GET));
    if(isset($msg)) {
        echo $msg . "<br/>";
        echo "Welcome, ".$_SESSION['user_id'] ;
    }
?>

它给我输出:

Your account has been created.

Notice: Undefined index: user_id in C:\xampp\htdocs\maxosale_client\account.php on line 30 Welcome,

我在 header 中编写了 session_start() 并包含在上面的代码中,所以这不是问题所在。

所以这是我的问题,请帮助我。

您应该在使用任何 $_SESSION 变量之前使用 session_start()。

<?php
    session_start();

    extract(array_map("test_input", $_GET));
    if(isset($msg)) {
        echo $msg . "<br/>";
        echo "Welcome, ".$_SESSION['user_id'] ;
    }
?>

通知后,您能看到$_SESSION['user_id']值吗?如果是这样,试试这个:

extract(array_map("test_input", $_GET));
if(isset($msg)) {
    echo $msg . "<br/>";
    $user_id = isset($_SESSION['user_id']) ? trim($_SESSION['user_id']) : '';
    echo "Welcome, " . $user_id ;
}

如果您在该通知后看不到 $_SESSION['user_id'] 值,则表明会话处理存在问题。根据代码中的 php error_reporting 设置或 php.ini 文件设置,您会看到通知/警告/错误。

我明白这个问题了。我没有在向用户插入数据的页面中开始我的会话 table。

现在我输入 session_start();

它运行得很好。

此处代码:

session_start();
// Add register user 
if(isset($_POST["register_btn"]))
{
extract(array_map("test_input", $_POST));
$md5pass=md5($password);

$m->set_data('full_name',$full_name);
$m->set_data('gender',$gender);
$m->set_data('email',$email); 
$m->set_data('mobile',$mobile);
$m->set_data('password',$md5pass);
$m->set_data('created_date',$date);
$m->set_data('updated_date',$date);

$a1= array ('role_id'=> 2,
            'full_name'=> $m->get_data('full_name'),
            'gender'=> $m->get_data('gender'),
            'email'=> $m->get_data('email'),
            'mobile'=> $m->get_data('mobile'),
            'password'=> $m->get_data('password'),
            'created_date' => $m->get_data('created_date'),
            'updated_date' => $m->get_data('updated_date'));

$last_auto_id=$d->last_auto_id("users");
$res=mysqli_fetch_array($last_auto_id);
$user_id=$res['Auto_increment'];

// inserting into users table
$insert=$d->insert('users',$a1);

if($insert>0)
{
    // I am starting session here
    $_SESSION['user_id']=$user_id;
    header("location:account.php?msg=Your account has been created.");
}
else {
    header("location:account.php?msg=Error.");
}
}

如果某些技巧不起作用,您可以添加 error_reporting(0); 在初始化会话变量之前,您将摆脱它。