首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户登录错误

用户登录错误
EN

Stack Overflow用户
提问于 2015-02-17 16:33:35
回答 1查看 82关注 0票数 0

(对不起,如果这是一个nooby问题-我是PhP的新手)

因此,我已经很好地设置了注册页面,并将其添加到MySQL数据库中,但是,当我使用正确的详细信息登录时,会得到错误:

PHP致命错误:调用未定义的方法用户::authenticate()

这是我的ClassUser代码

`

代码语言:javascript
复制
     function __construct() {
         if(session_id() == "") {
             session_start();
         }
    if (isset($_SESSION['isLoggedIn']) && $_SESSION['isLoggedIn'] == true) {
        $this->_initUser();
    }
}//end__construct

public function autheniticate($user,$pass) {
    $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
    if ($mysqli->connect_errno) {
        error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
        return false;
    }
    $safeUser = $mysqli->real_escape_string($user);
    $incomingPassword = $mysqli->real_escape_string($pass);
    $query = "SELECT * from Customer WHERE email = '{$safeUser}'";
    if (!$result = $mysqli->query($query)) {
        error_log("Cannot retrieve account for {$user}");
        return false;
    }
    //Will be obly one row, so no while() loop needed
    $row = $result->fetch_assoc();
    $dbPassword = $row['password'];

    if (crypt($incomingPassword, $dbPassword) != $dbPassword ) {
        error_log("Passwords for {user} don't match");
        return false;
    }

    $this->id = $row['id'];
    $this->username = $row['username'];
    $this->isLoggedIn = true;

    $this->_setSesstion();

    return true;
}//end function authenticate

private function _setSession() {

    if(session_id() == '') {
        session_start();
    }

    $_SESSION['id'] = $this->id;
    $_SESSION['username'] = $this->username;
    $_SESSION['isLoggedIn'] = $this->isLoggedIn;

}//end function setSession

private function _initUser() {

    if(session_id() == '') {
        session_start();
    }

    $this->id = $_SESSION['id'];
    $this->username = $_SESSION['username'];
    $this->isLoggedIn = $_SESSION['isLoggedIn'];

}//end function initUser
 }//end classUser

 ?>`

这是我的登录流程代码;

`

代码语言:javascript
复制
 require_once('functions.inc');

 //prevent access if they haven't submitted the form
 if (!isset($_POST['submit'])) {
     die(header("Location: login.php"));
 }

 $_SESSION['formAttempt'] = true;

 if(isset($_SESSION['error'])) {
     unset($_SESSION['error']);
 }
 $_SESSION['error'] = array();

 $required = array("username","password");

 //Check required fields
 foreach ($required as $requiredField) {
     if (!isset($_POST[$requiredField]) || $_POST[$requiredField] == "") {
         $_SESSION['error'][] = $requiredField . " is required.";
     }
 }

 if (count($_SESSION['error']) > 0) {
     die(header("Location: login.php"));
 } else {
     $user = new User;
     if($user->authenticate($_POST['email'],$_POST['password'])) {
         unset($_SESSION['formAttempt']);
         die(header("Location: authenticated.php"));
     } else {
         $_SESSION['error'][] = "There was a problem with your username and password.";
         die(header("Location: login.php"));
     }
 }
 ?>
     `

`

代码语言:javascript
复制
//Prevent access if they haven't submitted the form
if (!isset($_POST['submit'])) {
    die(header("Location: register.php"));
}

$_SESSION['formAttempt'] = true;
if (isset($_SESSION['error'])) {
    unset($_SESSION['error']);
}
$_SESSION['error'] = array();

$required = array("username", "password1", "password2");

//Check Required Fields
foreach ($required as $requiredField) {
    if(!isset($_POST[$requiredField]) || $_POST [$requiredField] == "") {
        $_SESSION['error'][] = $requiredField . "is required.";
    }
}

if(!preg_match('/^[\w.]+$/',$_POST['username'])) {
    $_SESSION['error'][] = "Username must only contain numbers and letters.";
}

if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
    $_SESSION['error'][] = "Invalid email address";
}

if($_POST['password1'] != $_POST['password2']) {
    $_SESSION['error'][] = "Passwords do not match";
}

//Final disposition
if (count($_SESSION['error']) > 0) {
die(header("Location: register.php"));
} else {
    if(registerUser($_POST)) {
        unset($_SESSION['formAttempt']);
        die(header("Location: register-success.php"));
    } else {
        error_log("Problem registering user: {$_POST['email']}");
        $_SESSION['error'][] = "Problem registering account";
        die(header("Location: register.php"));
    }
}

function registerUser ($userData) {
    $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
    if($mysqli->connect_errno) {
        error_log("Cannot connect to mySQL: " . $mysqli->connect_error);
        return false;
    }

    $email = $mysqli->real_escape_string($_POST['email']);

    //Check for an existing user
    $findUser = "SELECT id from Customer where email = '{$email}'"; 
    $findResult = $mysqli->query($findUser);
    $findRow = $findResult->fetch_assoc();
    if(isset($findRow['id']) && $findRow['id'] != "") {
        $_SESSION['error'][] = "A user with that email address already exists";
        return false;
    }
    $username = $mysqli->real_escape_string($_POST['username']);

    $cryptedPassword = crypt($_POST['password1']);
    $password = $mysqli->real_escape_string($cryptedPassword);


    $query = "INSERT INTO Customer (email,create_date,password,username) " . 
    "VALUES('{$email}',NOW(), '{$password}', '{$username}')"; 

    if($mysqli->query($query)) {
        $id = $mysqli->insert_id;
        error_log("Inserted ($email) as id ($id)");
        return true;
    } else {
        error_log("Problem inserting {$query}");
        return false;
    }

}
    ?>`

任何帮助都将不胜感激!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 16:41:02

您定义的函数名是:

代码语言:javascript
复制
// You are misspelling "authenticate"
autheniticate($user,$pass)

但你在打电话:

代码语言:javascript
复制
authenticate()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28566272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档