繁体   English   中英

PHP登录注册-无法访问类中其他文件中的$ conn变量

[英]PHP login registration - Can't access $conn variable in other file within a class

我想使用$ conn变量(在其类构造函数内部的dbconfig.php中声明)来使mysqli_query方法工作(在其Login类的login.php中使用)。

由于某些原因,我不断收到诸如“未定义的变量:conn”之类的错误。

任何帮助表示赞赏,欢呼。

//login_crud.php
<?php

include_once('../classes/login.php');
$crud = new Login();

if(isset($_POST['login'])){
    $username = $_POST['username'];
    $password = $_POST['password'];

    $crud->login($username);
}

?>


//login.php
<?php
include_once('../crud/login_crud.php');
include_once('../classes/dbconfig.php');

class Login
{
    public function __construct()
    {
        $db = new dbCon();
    }

    function login($username)
    {
        $query = mysqli_query($conn, "SELECT * FROM users WHERE username='$username'");
        $check = mysqli_num_rows($query);
        if($check == 1){
            header("Location: ../home.php");
        }
        else{
            echo "Incorrect username or password";
        }
    }

}

?>


//dbconfig.php
<?php   
    define('DB_SERVER','localhost');
    define('DB_USER','root');
    define('DB_PASSWORD','');
    define('DB_NAME','tpw_db');

    class dbCon
    {
        function __construct()
        {
            $conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die("Connection to database failed");
        }

    }

?>

首先,我建议您通读OOP的一些非常基本的原则。 您对dbCon类有具体的依赖关系,这将使测试非常困难,并且几乎违反了所有SOLID原则。

关于您的实际问题,您不能只引用在其他一些类构造函数中定义的变量(那样我们还会违反封装)。 您需要将该本地方法连接变量分配给类实例变量(最好是私有),然后提供某种getter方法。

下面应该这样做:

class dbCon {

   private $conn;

   public function __construct() {
      $this->conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die("Connection to database failed");
   }

   public function getConn() {
      return $this->conn;
   }

}

然后,您可以像这样在Login类中调用连接:

class Login {

   private $db;

   public function __construct() {
      $this->db = new dbCon();
   }

   public function login($username) {
      $query = mysqli_query($this->db->getCon(), "SELECT * FROM users WHERE username='$username'");
      $check = mysqli_num_rows($query);
      if($check == 1){
         header("Location: ../home.php");
      } else {
         echo "Incorrect username or password";
      }
   }

}

再次提醒我,我希望这仅仅是出于学习目的,不会在生产中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM