【发布时间】:2018-09-19 08:54:34
【问题描述】:
我正在关注有关如何使用数据库连接制作注册表单的教程,但由于某种原因,该代码对我不起作用。我不知道我做错了什么,所以也许有人可以为我指出。
这是User.php文件上的代码:
<?php
class User {
private $_db,
$_data,
$_sessionName;
public function __construct($user = null) {
$this->_db = DB::getInstance();
$this->_sessionName = Config::get('session/session_name');
}
public function create($fields = array()) {
if(!$this->_db->insert('users', $fields)) {
throw new Exception('There was a problem creating an account.');
}
}
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$data = $this->_db->get('users', array($field, '=', $user));
if($data->count()) {
$this->_data = $data->first();
return true;
}
}
return false;
}
public function login($username = null, $password = null) {
$user = $this->find($username);
if($user) {
if($this->data()->password === Hash::make($password, $this->data()->salt)) {
Session::put($this->_sessionName, $this->data()->id);
return true;
}
}
return false;
}
private function data() {
return $this->_data;
}
}
?>
恢复这个错误:
注意:未定义的属性:stdClass::$id in /opt/lampp/htdocs/rd-website/classes/User.php 在第 37 行
第 37 行是:Session::put($this->_sessionName, $this->data()->id);
有什么帮助吗?
【问题讨论】:
-
显示方法
data()。它返回一个不包含$id的(标准类)对象。但你要求它。 -
并看到
Hash::make我不太确定您是否应该遵循本教程。可能已经过时了。这些天我们在这种情况下使用 password_verify()。 -
是不是因为公共函数中的 ('id') find($user = null) { if($user) { $field = (is_numeric($user)) ? 'id' : '用户名'; $data = $this->_db->get('users', array($field, '=', $user)); if($data->count()) { $this->_data = $data->first();返回真; } } 返回错误;
-
是的,教程已经过时了,但在某种程度上我喜欢这个家伙解释他在做什么的方式,我对此很陌生,但不得不在某个时候开始。我在使用 salt 函数时遇到了一些问题,因为如今 PHP 7.2.2 的工作方式有所不同。
标签: php