Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:第58行调用未定义的方法stdClass::_setSession()_Php_Login_Session Variables_Fatal Error_Stdclass - Fatal编程技术网

Php 致命错误:第58行调用未定义的方法stdClass::_setSession()

Php 致命错误:第58行调用未定义的方法stdClass::_setSession(),php,login,session-variables,fatal-error,stdclass,Php,Login,Session Variables,Fatal Error,Stdclass,我对PHP比较陌生,正在构建网站的登录部分。我试图让代码正常工作,但毫无效果,因此变得非常沮丧。当我提交一个有效的用户名和密码时,我会收到上面的错误 致命错误:调用未定义的方法stdClass::\u第58行的setSession 我已经将查询与代码的其余部分分开进行了测试,并将变量作为表单的形式输入,即$User=…&$通过=。。。认证通过了。此外,数据库中不存在的数据也找不到经过php日志验证的用户 我已经对这个错误做了大量的搜索,我似乎无法找到任何适合这个实例的答案。请参阅下面的其他信息,

我对PHP比较陌生,正在构建网站的登录部分。我试图让代码正常工作,但毫无效果,因此变得非常沮丧。当我提交一个有效的用户名和密码时,我会收到上面的错误

致命错误:调用未定义的方法stdClass::\u第58行的setSession

我已经将查询与代码的其余部分分开进行了测试,并将变量作为表单的形式输入,即$User=…&$通过=。。。认证通过了。此外,数据库中不存在的数据也找不到经过php日志验证的用户

我已经对这个错误做了大量的搜索,我似乎无法找到任何适合这个实例的答案。请参阅下面的其他信息,了解我尝试过的一些对我有意义的事情。我已将相关文件包括在下面。提前感谢您提供的任何帮助

其他信息:

我试图删除$This的新stdClass定义,这会产生以下错误:警告:从引用遇到的第一个$This的空值创建默认对象。 我尝试将stdClass定义更改为User并收到以下错误:致命错误:已达到最大函数嵌套级别“100”,正在中止!指的是新的用户线。 相关文件:


你把事情弄得更复杂了。糟糕的语法如果!isset$This{$This=newstdclass;}这是错误的做法$这个带有小写字母t的对象是当前类的默认对象


您正试图用stdClass覆盖User$this的对象,因此解析器将_setSession作为stdClass的一个成员方法,而不是User,因此它显然是未定义的。尝试删除错误语法,使用$this->u setSession并将$this替换为$this,以便更好地理解。

很好的解释。谢谢。
class User {
public $Id;
public $Email;
public $FirstName;
public $LastName;
public $Address;
public $City;
public $State;
public $Zip;
public $Phone;
public $PhoneType;
public $IsLoggedIn = false;
function __construct() {
if (session_id() == "" || !isset($_SESSION)) {
session_start();
}
$_SESSION['IsLoggedIn'] = false;
if (!isset($This)) {$This = new stdClass();}
$This->IsLoggedIn = false;
if (isset($_SESSION['IsLoggedIn']) && $_SESSION['IsLoggedIn']== true) {
$This->_initUser();
}
} //end __construct
public function authenticate($User,$Pass) {
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
    if ($mysqli->connect_errno){
        error_log("Cannot connect to MySQL: " .$mysqli->connect_error);
        return false;
                                }
$hasher= new PasswordHash(8, false);
$SafeUser = $mysqli->real_escape_string($User);
$SafeUser = strtolower($SafeUser);
$IncomingPassword = $mysqli->real_escape_string($Pass);
$Stored_hash= "*";
$Query = "SELECT * FROM donors";
$QueryUser = $mysqli->query($Query);
while ($FindUserRow = $QueryUser->fetch_array()){
    if ($FindUserRow['Email']== $SafeUser){
        $Stored_hash = $FindUserRow['Password'];
            if ($hasher->CheckPassword($IncomingPassword, $Stored_hash)) {
                $Check = 'Authentication succeeded';}
            else { error_log("Passwords for {$User} don't match");
                $Check = 'Authentication failed';
                return false;}
        if (!isset($This)) {$This = new stdClass();}
        $This->Id = $FindUserRow['Id'];
        $This->Email = $FindUserRow['Email'];
        $This->FirstName = $FindUserRow['First_Name'];
        $This->LastName = $FindUserRow['Last_Name'];
        $This->Address = $FindUserRow['Street'];
        $This->City = $FindUserRow['City'];
        $This->Zip = $FindUserRow['Zip'];
        $This->State = $FindUserRow['State'];
        $This->Phone = $FindUserRow['Phone'];
        $This->PhoneType = $FindUserRow['Phone_Type'];
        $This->IsLoggedIn = true;
        $This->_setSession();
        return true;}
    else{
        error_log("Cannot retrieve account for {$User}");
        return false;}}
} //end function authenticate
private function _setSession() {
if (session_id() == '' || !isset($_SESSION)) {
session_start();
}
$_SESSION['Id'] = $This->Id;
$_SESSION['Email'] = $This->Email;
$_SESSION['FirstName'] = $This->FirstName;
$_SESSION['LastName'] = $This->LastName;
$_SESSION['Address'] = $This->Address;
$_SESSION['City'] = $This->City;
$_SESSION['Zip'] = $This->Zip;
$_SESSION['State'] = $This->State;
$_SESSION['Phone'] = $This->Phone;
$_SESSION['PhoneType'] = $This->PhoneType;
$_SESSION['IsLoggedIn'] = $This->IsLoggedIn;
} //end function setSession
private function _initUser() {
if (session_id() == '' || !isset($_SESSION)) {
session_start();
}
$This->Id = $_SESSION['Id'];
$This->Email = $_SESSION['Email'];
$This->FirstName = $_SESSION['FirstName'];
$This->LastName = $_SESSION['LastName'];
$This->Address = $_SESSION['Address'];
$This->City = $_SESSION['City'];
$This->Zip = $_SESSION['Zip'];
$This->State = $_SESSION['State'];
$This->Phone = $_SESSION['Phone'];
$This->PhoneType = $_SESSION['PhoneType'];
$This->IsLoggedIn = $_SESSION['IsLoggedIn'];
} //end function initUser