2017-02-04 7 views
0

Ich würde gerne die $ Conn-Variable (die in dbconfig.php im Klassenkonstruktor deklariert ist) verwenden, um die mysqli_query-Methode arbeiten zu lassen (das wird in login.php innerhalb seiner Login-Klasse verwendet).

Aus irgendeinem Grund bekomme ich immer die Fehler wie "Undefinierte Variable: conn".

Jede Hilfe geschätzt, Prost.

//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

Deklarieren Sie einfach Ihre $ conn-Variable als öffentliche Variable in Ihrer dbCon-Klasse. –

Antwort

0

Zunächst einmal würde ich raten Ihnen einige sehr grundlegenden Prinzipien der OOP zu lesen über. Sie haben eine konkrete Abhängigkeit von der Klasse dbCon, die das Testen sehr erschwert und unter anderem gegen fast alle SOLID-Prinzipien verstößt.

In Bezug auf Ihre eigentliche Frage können Sie nicht nur auf eine Variable verweisen, die in einem anderen Konstruktor definiert ist (dann würden wir auch die Kapselung verletzen). Sie müssen diese lokale Methodenverbindungsvariable einer Klasseninstanzvariablen (vorzugsweise privat) zuweisen und dann eine Art von Getter-Methode bereitstellen.

Die unten sollte es tun:

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

} 

Dann können Sie Ihre Verbindung in der Login-Klasse aufrufen, wie so:

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

} 

Wieder lasse ich mit dem Vorbehalt, dass ich hoffe, dass dies allein ist zu Lernzwecken und wird nicht in der Produktion verwendet, wie es ist.

+0

Arbeitete, danke für die Tipps auch – Alexander

Verwandte Themen