[英]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.