У меня здесь проблема, когда у меня есть этот класс, свойства класса 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
По какой-то причине?






Вы не выбираете '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'");
Спасибо, что заметили ошибку!
Не забудьте правильно экранировать свои переменные в операторах SQL, иначе вы уязвимы для инъекций. Самый безопасный (только безопасный) способ избежать внедрения sql - использовать подготовленные операторы, но в противном случае использовать
mysqli_real_escape_stringили эквивалент для вашего движка.