Как использовать переменные сеанса на разных страницах, когда функция "session_start ()" уже используется? - PullRequest
0 голосов
/ 12 мая 2019

У меня проблема при попытке отобразить некоторые переменные сеанса на другой странице в php.Большинство потоков, которые я здесь видел, связаны с отсутствием "session_start ()".Но у меня уже есть это наверху моих файлов.

Я пытаюсь создать "модуль восстановления вашего пароля".У меня есть элемент формы, действие которого настроено на другую страницу.У меня есть база данных с двумя таблицами.Форма просто позволяет пользователю ввести свой адрес электронной почты.Когда я нажимаю кнопку sumbit, соединение mysqli должно искать в обеих таблицах пользователя с адресом электронной почты, хранящимся в форме, а затем сохранять остальные элементы (имя, пароль, вопрос восстановления и его ответ)table в некоторых переменных php.

В операторе if contidional я проверяю, в какой таблице хранится электронная почта, и затем создаю некоторые переменные сеанса, в которых хранится вся информация указанного пользователя.

Inна другой странице я просто пытаюсь отобразить некоторый текст вместе с переменной сеанса имени пользователя, если эта переменная сеанс установлена.Если нет, то это будет повторять текст «неудачной сессии».

Вот форма (файл, в котором находится эта вещь, с session_start () уже вверху):

<form action="cambio.php" method="post">
     <h1>RECUPERACIÓN DE CONTRASEÑA</h1><br>
     <p>Escriba su dirección de correo para modificar su contraseña:</p><br>
     <div class="form group">
        <label for="email">Correo electrónico:</label>
        <input type="email" class="form-control ancho" id="email" name="email" class="ancho"><br>
      </div>
      <button type="submit" class="btn btn-primary" name="recuperar">Recuperar contraseña</button>                
</form>

После подключения к базе данных, здесь я устанавливаюпеременные сеанса (в том же .php, что и предыдущий код формы):

 if(isset($_POST['recuperar'])) {
                    $c = $_POST["email"];
                    $buscarAlumno="select nombre, correo, password, num_pregunta, respuesta from alumno where correo='$c';"; //first table
                    $buscarProfesor="select nombre, correo, password num_pregunta, respuesta from profesor where correo='$c';"; //second table
                    $resA = $conn->query($buscarAlumno);
                    $resP = $conn->query($buscarProfesor);
                    $rowA = $resA->fetch_array();
                    $rowP = $resP->fetch_array();

                    //Save the e-mail-matching fields (first table)
                    $rnA = $rowA["nombre"];
                    $rcA = $rowA["correo"];
                    $rpA = $rowA["password"];
                    $rnpA = $rowA["pregunta"];
                    $rrA = $rowA["respuesta"];
                    //Save the e-mail-matching fields (second table)
                    $rnP = $rowP["nombre"];
                    $rcP = $rowP["correo"];
                    $rpP = $rowP["password"];
                    $rnpP = $rowP["num_pregunta"];
                    $rrP = $rowP["respuesta"];

                    //In this statement, some of the variables above are going
                    //to be stored in session variables depending on the 
                    //table in which the e-mail was found
                    if (isset($c)) {
                        if ($c == $rcP) { 
                            $_SESSION['nomCorrecto'] = $rnP;
                            $_SESSION['corCorrecto'] = $rcP;
                            $_SESSION['pasCorrecto'] = $rpP;
                            $_SESSION['preCorrecto'] = $rnpP;
                            $_SESSION['resCorrecto'] = $rrP;
                        }                
                        elseif ($c == $rcA) {
                            $_SESSION['nomCorrecto'] = $rnA;
                            $_SESSION['corCorrecto'] = $rcA;
                            $_SESSION['pasCorrecto'] = $rpA;
                            $_SESSION['preCorrecto'] = $rnpA;
                            $_SESSION['resCorrecto'] = $rrA;
                        }
                        else {
                            echo "Usuario no registrado.";
                        }
                    }
                }

Этот код находится на другой странице, где я хочу, чтобы результаты отображались (опять же, на нем уже есть session_start ()начало файла).

        <?php            
            //This part should show the name of the user, but is not working
            if(isset($_SESSION['nomCorrecto'])) {
                echo "Hola " .$_SESSION['nomCorrecto']. ".";            
            }
            else {
                echo "Sesión fallida.";
            }
        ?>  

Я не знаю, что я делаю неправильно, я не знаю, связана ли ошибка с оператором формы или как я сохраняю и отображаю сеанспеременные.Я только что получил сообщение об ошибке "Sesión fallida".

Любая помощь приветствуется.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Наконец-то разобрался. Мне нужно объявить переменные сеанса, которые я собираюсь использовать сразу после функции session_star ().

Спасибо за помощь.

0 голосов
/ 12 мая 2019

Убедитесь, что вы инициализировали session_start(); до вызова любых сеансов.

Например, вы можете добавить что-то подобное в начало каждой страницы, где используется сеанс: if (session_status() == PHP_SESSION_NONE) session_start(); Это проверит, запущен сеанс или нет, и если нет, то запустит его.

Вы также можете использовать var_dump($_SESSION); во всех местах, где вы используете сеансы для отслеживания / изучения данных сеанса.

Примечание : общая причина, по которой ваш код не являетсяработает, если вам не удалось инициализировать session_start(); в необходимых местах.Невыполнение некоторых необходимых проверок вашего кода также может вызвать это.Вы можете найти более подробную информацию о потере сеанса в ответе на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...