Задать вопрос
@Vercaceee

Ошибка в php, как исправить?

<?php
session_start();
require_once __DIR__ . '/scr/connect.php';
$connect = getDB();
$idUser = $_SESSION['user']['id'];
if ($idUser == '') {
}else{
    header("Location: /profile.php");
}

Ошибки:

Warning: Undefined array key "user" in \index.php on line 4
Warning: Trying to access array offset on value of type null in \index.php on line 4

Когда сессия запушена, варнингов нет, когда не запушена - появляются.
  • Вопрос задан
  • 294 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Самое удивительное здесь в том, что два месяца назад вам, пусть и криво, но удавалось справиться с этой проблемой.
Ну давайте попробуем ещё раз, заодно сделав этот код чуть более осмысленным

<?php
session_start();
if (isset($_SESSION['user']['id'])) {
    header("Location: /profile.php");
    exit;
}
require_once __DIR__ . '/scr/connect.php';
$connect = getDB();


  • Поскольку само проверяемое значение нигде не используется, а важно только его наличие, то присваивать его переменной нет смысла.
  • Поскольку нас интересует наличие значения в сессии, то и проверяем мы именно наличие, с помощью isset.
  • Детсадовский пустой if с else переписываем на нормальный, просто инвертировав условие.
  • Соединение с БД делаем уже ПОСЛЕ поверки, поскольку при редиректе оно оказывается бессмысленным.
  • После ридеректа добавляем принудительный выход, поскольку сам редирект, внезапно, работу скрипта не прекращает (кто бы мог подумать).


Если же нам в дальнейшем коде понадобится переменная (например, в том же profile.php), то тогда имеет смысл присвоить его переменной, используя оператор приведения к null как сокращённую форму проверки и присвоения с помощью isset():

<?php
session_start();
$idUser = $_SESSION['user']['id'] ?? null;
if ($idUser === null) {
    header("Location: /login.php");
    exit;
}
require_once __DIR__ . '/scr/connect.php';
$connect = getDB();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fernus
@Fernus
Техник - Механик :)
$_SESSION['user']['id'] - сюда изначально записывается "что-то" ?

Если тупо "проверку" нужно сделать(беря во внимание, что всё таки туда "когда-то что-то записывалось"), то:

<?php

session_start();

require_once __DIR__ . '/scr/connect.php';

$connect = getDB();

if (!empty($_SESSION['user']['id']) && $_SESSION['user']['id'] == 'XYZ') {

    $idUser = $_SESSION['user']['id'];

}else{

    // Пусто в сессии...

    header("Location: /profile.php");

}


UPD:
Хотя проверка какая-то тупая...наверное вот так должно быть:

<?php

session_start();

require_once __DIR__ . '/scr/connect.php';

$connect = getDB();

if (!isset($_SESSION['user']['id'])) {

    // Пусто

}else{

    $idUser = $_SESSION['user']['id'];

    header("Location: /profile.php");

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы