我试图将自己置于OOP中,并且我对可变范围存在问题。
除会话数组外,一切正常,所有内容都正确发布。
我的'会话表'及其元素已声明但其变量仍未定义。我收到以下错误消息:
注意:未定义的变量:行
注意:尝试获取非对象的属性
我可以做些什么才能访问$row
?
这是我的课程代码,包括其方法:
$db = db::connect();
class auth {
protected $login;
protected $password;
protected $email;
public function setLogin($login) {
$this->login = $login;
}
public function setPassword($password) {
$this->password = $password;
}
public function login($fields, $table, $col_login, $col_password) {
$query = Db::getInstance()->prepare('SELECT ' . $fields . ' FROM ' . $table . ' WHERE ' . $col_login . ' = :login AND ' . $col_password . ' = :password');
$query->bindValue( ':login', $this->login, PDO::PARAM_STR);
$query->bindValue(':password', $this->password, PDO::PARAM_STR);
$query->execute();
if ($query->rowCount() > 0) {
$row = $query->fetch(PDO::FETCH_OBJ);
echo '<pre>';
print_r($row->u_login);
echo '</pre>';
return true;
}
else {
return false;
}
$query->closeCursor();
}
}
这是我的表格代码;这是我称之为类方法的地方:
<?php
session_start();
if (isset($_POST['login_submit'])) {
if (!empty($_POST['login']) && !empty($_POST['password'])) {
$auth = new auth();
$auth->setLogin($_POST['login']);
$auth->setPassword(sha1($_POST['password']));
if ($auth->login('u_login,u_password,u_email,u_id_level', 'users', 'u_login', 'u_password')) {
$_SESSION['back_office'] = array(
'login' => $row->u_login, // Error, $row is undefined
'level' => $row->u_level,
'email' => $row->u_email
);
}
else {
message::showError('Compte non reconnu');
}
}
else {
message::showError('Veuillez remplir tous les champs');
}
}
?>
<form action="test.php" name="loginform" method="post">
<input type="text" name="login" />
<input type="password" name="password" />
<input type="submit" name="login_submit" value="Se connecter" />
</form>
答案 0 :(得分:0)
在您的身份验证功能中,您需要返回行
if($query->rowCount() > 0){
$row = $query->fetch(PDO::FETCH_OBJ);
return $row;
}else{
return false;
}
在您的通话中,将login
的返回值指定为$row
if (($row = $auth->login('u_login,u_password,u_email,u_id_level', 'users', 'u_login', 'u_password'))) {
答案 1 :(得分:0)
您必须返回$row
而不是return true
$row = $query->fetch(PDO::FETCH_OBJ);
echo '<pre>';
print_r($row->u_login);
echo '</pre>';
return $row; // return true;
你这样检查
if($row = $auth->login('u_login,u_password,u_email,u_id_level',
'users', 'u_login', 'u_password') !== false)
然后您可以设置$row
$_SESSION['back_office'] = array(
'login' => $row->u_login,
'level' => $row->u_level,
'email' => $row->u_email
);
答案 2 :(得分:0)
$ row不是全局变量,因此您无法从外部访问。
让它成为全球性之间是不好的。
我建议你输入一个名为$ authenticated_user的变量。
就像那样:
class auth {
// ...
protected $authenticated_user;
//...
public function login( // ... ) {
// ...
$authenticated_user = $query->fetch(PDO::FETCH_OBJ);
// ...
}
public getUser()
{ return $authenticated_user; }
}
在你的Auth呼叫部分:
$row = $auth->getUser();
那应该没事。