2017-02-04 15 views
0

Я хотел бы использовать переменную $ conn (которая объявлена ​​в dbconfig.php внутри своего конструктора классов), чтобы заставить метод mysqli_query работать (который используется в login.php внутри своего класса Login).

По какой-то причине я продолжаю получать ошибки, такие как «Неопределенная переменная: 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

Просто объявите переменную $ conn переменной как общедоступную переменную в классе dbCon. –

ответ

0

Прежде всего, я бы посоветовал вам прочитать некоторые очень основополагающие принципы ООП. У вас есть конкретная зависимость от класса 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; 
    } 

} 

Затем вы можете вызвать соединение в Вход класс следующим образом:

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"; 
     } 
    } 

} 

Опять же, я оставляю с оговоркой, что я надеюсь, что это только для учебных целей и не будет использоваться в производстве, как есть.

+0

Работал, спасибо за советы и – Alexander

 Смежные вопросы

  • Нет связанных вопросов^_^