我想使用$ 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");
}
}
?>
答案 0 :(得分:0)
首先,我建议你阅读一些非常基本的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";
}
}
}
再次,我留下了一个警告,我希望这仅仅是为了学习目的,并且不会在生产中使用。