Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2022, 10:11   #1
Davidddd
Новичок
Джуниор
 
Регистрация: 23.08.2022
Сообщений: 1
По умолчанию Почему не сохраняется переменная в $_SESSION

Возникла такая проблема переменная сохраняется в $_SESSION, но когда я перехожу на другую страницу и возвращаю назад, она обнуляется.

Пробовал с помощью $_COOKIE, но попытка тоже не удалась.
Код:

<?php
    error_reporting(0);
 
    session_start();
    require_once 'form/db.php';
    
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];
 
 
 
    if (isset($user_name) && isset($password)) {
 
        $user_name_db = $db->query("SELECT `id` FROM `users` WHERE `user_name` = '$user_name'");
        $user_name_db = $user_name_db -> fetch_assoc();
 
        $id = $db->query("SELECT `id` FROM `users` WHERE `user_name` = '$user_name'");
        $id = $id->fetch_assoc();
 
        $_SESSION['id'] = $id['id'];
        print $_SESSION['id'];
         $id = $_SESSION['id'];
 
        $password_db = $db->query("SELECT `password` FROM `users` WHERE `id` = '$id'");
        $password_db = $password_db->fetch_assoc();
        
        $balance = $db->query("SELECT `balance` FROM `users` WHERE `id` = '$id'");
        $balance = $balance->fetch_array();
        
        if (strlen($balance['balance']) == 1 && (strlen($balance['balance'])) == 2) {
            $balance['balance'] = $balance['balance'].'.00 ₽';
        } elseif (strlen($balance['balance']) == 3) {
            $balance['balance'] = $balance['balance'].'.0 ₽';
        } elseif (strlen($balance['balance']) >= 4) {
            $balance['balance'] = $balance['balance'].'₽';
        } else {
            $balance['balance'] = $balance['balance'].'0.00 ₽';
        }
    }
 
?>

        <div class="balance__align">
            <?php if(password_verify($password, $password_db['password'])) {
                print'<button class="replenish_balance_box"><span class="replenish_balance">+</span></button>';
                print('<a href="form/auth.html" class="balance" id="balance">'.$balance['balance']).'</a>';
            } else {
                print'<a href="form/reg.html" class="balance" id="balance">Войти</a>';
            }
            ?>
        </div>
Davidddd вне форума Ответить с цитированием
Старый 23.08.2022, 10:49   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А вы уверены, но обнуляется $_SESSION, а не $_POST
macomics вне форума Ответить с цитированием
Старый 23.08.2022, 11:50   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

У вас в коде $_SESSION используется только тут:
Код:
        $_SESSION['id'] = $id['id'];
        print $_SESSION['id'];
         $id = $_SESSION['id'];
Причем первой же строкой она перезаписывается.
Arigato вне форума Ответить с цитированием
Старый 23.08.2022, 13:29   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

2Arigato .... просто при переходе на страницу - до туда даже дело не доходит))) отсеивается на стадии проверки POST запроса
ADSoft вне форума Ответить с цитированием
Старый 23.08.2022, 13:45   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Так я и говорю, что у вас $_POST не существует после обновления. $_POST придут только после обновления при нажатии на Submit на форме. Вам надо сначала из $_POST проверить значения $_POST['user_name']; и $_POST['password']. Если они верные, тогда записать в $_SESSION['id'] - ID пользователя. И проверять isset уже $_SESSION['id'] а не $user_name и $password.

Код:
...
    if (isset($_POST['user_name']) && isset($_POST['password'])) {
        $user_name = $_POST['user_name'];
        $password = $_POST['password'];
        $query = $db->query("SELECT `id` FROM `users` WHERE `user_name` LIKE '$user_name' AND `password` LIKE '$password'");
        $user_id = $query -> fetch_assoc();
        $_SESSION['id'] = $user_id['id'];
    }
    if (isset($_POST['logout'])) {
        unset($_SESSION['id']);
    }
    if (isset($_SESSION['id'])) {
        print $_SESSION['id'];
         $id = $_SESSION['id'];
...
    }

Последний раз редактировалось macomics; 23.08.2022 в 14:26.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битрикс. Отдаю в префильтр arrFilter массив ID, почему в выдаче компонента не сохраняется порядок элементов, как в фильтре? Aleskandr WordPress и другие CMS 3 14.07.2021 20:05
[Python] Подскажите почему переменная running с значением True стоит перед while? bITA666 Python 7 22.03.2019 21:47
[Python] Подскажите почему переменная running с значением True стоит перед while? bITA666 Помощь студентам 3 22.03.2019 21:10
Почему утечка памяти, если указатель на обьект сохраняется? Человек_Борща Общие вопросы Delphi 4 24.11.2011 13:24
Почему переменная а = 2??? Paul_AG Общие вопросы C/C++ 2 25.05.2009 18:55