За последние 24 часа нас посетили 22818 программистов и 1227 роботов. Сейчас ищут 706 программистов ...

Как вывести данные из суперглобального массива $_SE

Тема в разделе "PHP для новичков", создана пользователем eanautt, 10 июл 2017.

  1. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    Не могу понять в чем проблема не выводится логин пользователя после его авторизации, хотя должен:

    Админ-панель
    PHP:
    1. <?php require "/includes/lgsn.php"; ?>
    2. <?php if( isset($_SESSION['logged_user']) ) : ?>
    3. Вы авторизованы! <?php echo $_SESSION['logged_user']; ?>
    4. </br>
    5. Привет, <?php echo $_SESSION['logged_user']->login; ?>
    6. <hr><a href="/logout.php">Выйти</a>
    7. <?php else : ?>
    8. Вы не авторизованы!
    9. <?php endif; ?>

    Авторизация
    PHP:
    1. <form action="/login.php" method="POST">
    2. <?php
    3. $data = $_POST;
    4. if( isset($data['do_login']) )
    5. {
    6. $errors = array();
    7.  
    8. if( trim($data['login']) == '' )
    9. {
    10. $errors[] = 'Введите логин';
    11. }
    12.  
    13. if( $data['password'] == '' )
    14. {
    15. $errors[] = 'Введите пароль';
    16. }
    17.  
    18.  
    19. $user = R::findOne('users', 'login = ?', array($data['login']));
    20.  
    21. if( $user ) {
    22.  
    23. if( password_verify($data['password'], $user->password) ) {
    24.  
    25.  
    26.  
    27. echo 'You' . "'" . 've been signup!';
    28.  
    29. $_SESSION['logged_user'] = $user;
    30.  
    31.  
    32.  
    33. } else {
    34. $errors[] = 'Неверный пароль!';
    35. }
    36.  
    37.  
    38.  
    39. } else
    40. {
    41.     $errors[] = 'Пользователь с таким логином не найден!';
    42. }
    43.  
    44.  
    45. if( ! empty($errors) )
    46. {
    47.  
    48. echo '<div style="color: red;">'.array_shift($errors).'</div';
    49.  
    50. }
    51.  
    52. }
    53.  
    54. ?>
    55.  
    56.  
    57. <p><label for="login">Логин:</label></p>
    58. <p><input id="login" type="text" name="login" value="<?php echo @$data['login']; ?>"></p>
    59.  
    60.  
    61. <p><label for="password">Пароль:</label></p>
    62. <p><input id="password" type="text" name="password" value="<?php echo @$data['password']; ?>"></p>
    63.  
    64. <p><button type="submit" name="do_login">Войти</button></p>
    65.  
    66. </form>
    <strong>Файлы все равно на лок-хосте. Файл подключения базы данных работает корректно - это проверено. Ошибка может быть где в этом коде</strong>

    Использую redbean php
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    допиши отображение ошибок error_reporting ...
    и узнай с чем, с какой функцией работают $_SESSION
    какая функция старт дает ? гугл что говорит ?

    почему ?
    $data = $_POST;

    58 и 62 собаки убери - недруг кодера
     
  3. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    Старт функции находится в подключаемом файле <?php session_start(); ?>
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    1. Какое значение выдают $data['password'] и $user->password?
    2. У Вас пароли хранятся в незашифрованном виде?
    3. Лучше написать так
    PHP:
    1. if( $user instanceof ИмяКласса) {...
    2. //или
    3. if( $user !== false) {...
    4. Что в конечном счете выводится:"Вы не авторизованы!" или "Вы авторизованы!"?

    P.S.: echo'You\'ve been signup!';
     
    #4 Maputo, 10 июл 2017
    Последнее редактирование: 10 июл 2017
  5. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    1. $data['password'] - значение введенное пользователем в поле пароль (e.g. 000)
    $user->password - зашифрованный пароль из базы данных
    2. Пароли, которые пользователи вводят на странице signup хранятся в зашифрованном виде в БД с помощью ф-ии password_hash
    3. +
    4. Вы авторизованы, если данные введены верно
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    4. То-есть, выводится "вы авторизованы", но логин не выводится?
    PHP:
    1. //ни тут:
    2. echo $_SESSION['logged_user'];
    3. //ни тут:
    4. echo $_SESSION['logged_user']->login;
    5. // ?
     
    #6 Maputo, 10 июл 2017
    Последнее редактирование: 10 июл 2017
  7. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    Ой, я подумал про страницу авторизации

    Здесь
    PHP:
    1. echo $_SESSION['logged_user']->login;
    должно вывестись логин пользователя из базы
     
  8. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    isset($_SESSION['logged_user']) дает true или false при вводе корректного логина и пароля пользователем?
    Если true - значит проблема в самом объекте $user (точнее его классе). У свойства login установлено public?
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    В догонку:
    Загружено ли описание класса (require 'имя файла класса' ) в момент доступа к свойству login?
     
  10. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    isset($_SESSION['logged_user']) = true
    --- Добавлено ---
    Я новичок - можете объяснить
    --- Добавлено ---
    Я предоставил весь код php кроме файла который подключается в начале. Он сообщается с базой данных
    --- Добавлено ---
    PHP:
    1. <?php session_start();?>
    2. <?php
    3. require "/rb.php";
    4. R::setup( 'mysql:host=?;dbname=?', '?', '?');
    5. ?>
    ? - вопросы - значения конкретные я их скрыл
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    В этой строке из первого Вашего сообщения в $user передается (как я понял) объект пользователя или false.
    Так вот этот объект должен быть описан в каком либо классе. Объявление этого класса, наверняка, лежит в отдельном файле.
    Вопрос в том подгружается ли этот файл (с классом пользователя) в момент, когда Вы запрашиваете свойство login?
    PHP:
    1.  <?php echo $_SESSION['logged_user']->login; ?>
     
  12. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    Нет, он не объявляется и я не знаю как это сделать . Поможите?
     
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я так полагаю в файл админ-панели Вам надо добавить строчку
    PHP:
    1. <?php require_once "/rb.php"; ?>
    Или какой другой файл, где есть описание класса пользователя