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

Не видит Сессии после обработки формы, как это решить?

Здравствуйте.

Такой вопрос, после регистрации не видит сессии, где я недосмотрел?

Вот обработчик формы регистрации. В нём после проверки добавления в БД кидает на генерируемую личную страницу пользователя.
session_start();

    require_once 'connection.php';

    $dbh = new PDO('mysql:host=localhost; dbname=projectboard', $user, $pass);

    if (!empty($_POST)){
        if ( !isset($_POST['name']) || !isset($_POST['lastname']) || !isset($_POST['email']) || !isset($_POST['pass']) ) {
            echo 'Не все данные заполнены!!!';
            die;
        }
       
        $name = htmlspecialchars($_POST['name']);
        $lastname = htmlspecialchars($_POST['lastname']);
        $email = htmlspecialchars($_POST['email']);
        $pwd = htmlspecialchars($_POST['pass']);

        $name_t = trim($name);
        $lastname_t = trim($lastname);
                
        $hashed_password = password_hash($pwd, PASSWORD_DEFAULT);
        
        $stmt = $dbh->prepare("INSERT INTO users (name, lastname, email, password) VALUES (:name, :lastname, :email, :pass)");
        $stmt->bindParam(':name', $name_t);
        $stmt->bindParam(':lastname', $lastname_t);
        $stmt->bindParam(':email', $email);
        $stmt->bindParam(':pass', $hashed_password);

        $falg = $stmt->execute();

        if ($falg) {
            header ('Location: office.php?id='. $_SESSION['id']);
            die;
        } else {
            echo "Данная электронная почта уже используется. ";?><a href="enter.php" style="color: red">Войдите</a> <?php echo "по этой почте или используйте другую";
            die;
        }    

    }


Но почему-то так не работает, когда он кидает на личную страницу, срабатывает такой код для проверки пользовательского контента, чтобы я мог сделать подобие чужой страницы по типу гостя:

session_start();

    error_reporting(E_ALL & ~E_NOTICE); //Убираем Notice, а все остальные ошибки выводим

    require_once 'connection.php';

    $dbh = new PDO('mysql:host=localhost; dbname=projectboard', $user, $pass);

    $id = $_SESSION['id'];

    $stmt = $dbh->prepare('SELECT name, lastname FROM users WHERE id = :id');
    $stmt->bindParam(':id', $id);
    $stmt->execute();

    $officeID = $_GET['id'];

            if(!isset($_SESSION['id'])) { 
                session_destroy();
                header('Location: enterOrReg.html');
                exit;
            }


Но происходит перевод на страницу где предлагает войти или зарегестрироваться:

<!DOCTYPE html>
<html lang="ru-RU">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="enterOrReg.css">
    <title>Войдтие или зарегестрируйтесь | Проектная доска</title>
</head>
<body>
    <div>
        <button onclick="document.location='enter.php'" class="enter">Войдите</button>
        <p>или</p>
        <button onclick="document.location='registration.php'">зарегистрируйтесь</button>
    </div>
</body>
</html>


На сколько я понимаю, проблема в этой строчке кода на личной странице, но без этой строчки код не будет работать как мне надо, чтобы человек мог заходить на чужую страницу:

$officeID = $_GET['id'];

Если я просто захожу на личную страницу пользователя, то такой код не срабатывает, хотя и на странице входа, и на странице регистрации начало сессии включено:

session_start();

    error_reporting(E_ALL & ~E_NOTICE); //Убираем Notice, а все остальные ошибки выводим

    require_once 'connection.php';

    $dbh = new PDO('mysql:host=localhost; dbname=projectboard', $user, $pass);

    $id = $_SESSION['id'];

    $email = trim ($_POST['email']);
    $pwd = trim($_POST['pass']);

    $email = htmlspecialchars($email);
    $pwd = htmlspecialchars($pwd);

                    if ( !empty($pwd) && !empty($email) ) {
                        $stmt = $dbh->prepare('SELECT id, email, password FROM users WHERE email = :email'); //Добавили id, для перенаправления на личную страницу
                        $stmt->bindParam(':email', $email);
                        $stmt->execute();
                
                        $user_p = $stmt->fetch(PDO::FETCH_OBJ);
                
                        if ($user_p){
                            if(password_verify($pwd, $user_p->password)){
                                $_SESSION['id'] = $user_p->id;
                                header('Location: office.php?id='. $_SESSION['id']);
                            }else{
                                echo '<p class="wrong">Неверный Email или пароль</br>Если Вы не зарегестрированы</p>';
                                echo '<a href="registration.php" class="reg">Зарегестрироваться</a>';
                            }
                        }else{
                            echo '<p class="wrong">Неверный Email или пароль</br>Если Вы не зарегестрированы</p>';
                            echo '<a href="registration.php">Зарегестрироваться</a>';
                        }
                    }else{
                        echo '<p class="noValues">Пожалуйста, заполните все поля</p>';
                    }
  • Вопрос задан
  • 239 просмотров
Подписаться 2 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
$_SESSION['id'] у вас повсеместно используется, но нигде не задается. Видимо вы не совсем понимаете как работают сессии.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽