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

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

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

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

Вот обработчик формы регистрации. В нём после проверки добавления в БД кидает на генерируемую личную страницу пользователя.
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>';
                    }
  • Вопрос задан
  • 214 просмотров
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
$_SESSION['id'] у вас повсеместно используется, но нигде не задается. Видимо вы не совсем понимаете как работают сессии.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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