Свойства класса PHP NULL даже после инициализации

У меня здесь проблема, когда у меня есть этот класс, свойства класса NULL даже после инициализации

class User
{
    public $name;
    public $id;
    public $email;
    private $password;

    private $dbconn;
    function __construct()
    {
        $this->dbconn= new Config\Database();
    }
    public function login( $email, $password){
        $matches=$this->dbconn->query("SELECT pwhash from users WHERE email = '$email'");
        if ($matches->num_rows==0){
            return "no such user";
        }else{
            while($row =$matches->fetch_assoc()){
                if ($row['pwhash']==hash("sha256",$password)){
                $this->name=$row['name'];
                $this->id=$row['id'];

                return "login successful";
            }else{
                return "login fail";
            }
        }
    }
}

Я пытаюсь получить доступ к классу вне файла php,

$user = new User\User();
if (isset($_POST['email']) && isset($_POST['password']) ){
    $loginmessage=$user->login($_POST['email'],$_POST['password']);
}
if ($loginmessage= = "login successful"){
        $userarray= get_object_vars($user);
        var_dump($userarray);

}

Затем я var_dump $userarray, который показывает

["name"]=>
  NULL
  ["id"]=>
  NULL

По какой-то причине?

Не забудьте правильно экранировать свои переменные в операторах SQL, иначе вы уязвимы для инъекций. Самый безопасный (только безопасный) способ избежать внедрения sql - использовать подготовленные операторы, но в противном случае использовать mysqli_real_escape_string или эквивалент для вашего движка.

Andy 04.06.2018 18:29

Одного несоленого SHA256 недостаточно для безопасного хранения паролей. Используйте password_hash().

Sammitch 04.06.2018 20:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не выбираете 'name' или 'id' в своем SQL, поэтому вы получаете NULL при использовании:

$this->name=$row['name'];
$this->id=$row['id'];

Измените свой SQL на:

$matches=$this->dbconn->query("SELECT pwhash,name,id from users WHERE email = '$email'");

Спасибо, что заметили ошибку!

Alexander Ho 04.06.2018 18:30

Другие вопросы по теме