我使用我在网上找到的资源为我正在构建的网站编写了一个登录脚本。当我在本地服务器上运行我的代码时,它运行良好,但现在我实际上是在真实服务器上在线运行它不起作用。我想我已经缩小了我的错误,但是对于PHP的新手并没有使用MySql的经验,我无法解决我的问题。这是登录脚本的文件:
//login file
<?php
class Login{
private $db_connection = null;
public function __construct(){
session_start();
$this->dologinWithPostData();
}
private function dologinWithPostData(){
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$this->db_connection()->connect_errno) {
// escape the POST stuff
$email = $_POST['email'];
// database query, getting all the info of the selected user (allows login via email address in the
// username field)
$sql = "SELECT email, password
FROM users
WHERE email = '" . $email ."'";
$result_of_login_check = $this->db_connection->query($sql);//This is 0
// if this user exists
if ($result_of_login_check->num_rows == 1) {
// get result row (as an object)
$result_row = $result_of_login_check->fetch_object();
// using PHP 5.5's password_verify() function to check if the provided password fits
// the hash of that user's password
if ($_POST['password'] == $result_row->password) {
// write user data into PHP SESSION (a file on your server)
$_SESSION['email'] = $result_row->email;
$_SESSION['user_login_status'] = 1;
} else {
$this->errors[] = "Wrong password. Try again.";
$_SESSION['user_login_status'] = 0;
}
} else {
$this->errors[] = "This user does not exist.";
}
} else {
$this->errors[] = "Database connection problem.";
}
}
print_r($this->errors);
}
public function isUserLoggedIn()
{
if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) {
return true;
}
// default return
return false;
}
}
?>
我在另一个基本上如下的文件中运行它:
//Run file
require_once("dbconfig.php");
include_once("login.php");
$login = new Login();
if($login->isUserLoggedIn() == true){
//go to another page }
用于访问数据库的变量在dbconfig.php
中实例化,并且是正确的。使用此代码,我收到错误消息,指出页面无法正常工作且无法处理请求。当我注释掉这行
if (!$this->db_connection()->connect_errno) {
和其后的else语句,输出为#34;此用户不存在&#34;。所以我认为错误与$this->db_connection()->connect_errno)
有关。如果您可以找到我出错的地方或者有关如何重写脚本以使其更好的建议,我们非常感谢。
答案 0 :(得分:1)
这是一个数据库,确定您的实时远程服务器数据库配置不同。请验证您dbconfig.php
文件确认
数据库名称,主机,端口,用户名,密码都是用您的实时数据库定义的
答案 1 :(得分:1)
这是错误的:
if (!$this->db_connection()->connect_errno) {
db_connection
只是一个包含数据库连接对象的变量。它是 NOT 方法。
你可能想要
if (!$this->db_connection->connect_errno) {
^--note lack of ()
代替。
答案 2 :(得分:0)
我认为这个以下检查存在问题。您的结果获得超过1条记录。 //如果此用户存在
if ($result_of_login_check->num_rows == 1) {
......
}else{
$this->errors[] = "This user does not exist.";
}
确保您的电子邮件地址在数据表中是唯一的,如果它不是唯一的,那么您的上述语句将失败并显示文本&#34;此用户不存在。&#34;来自其他部分