2012-01-19 48 views
-2

問題:我有2個類,DB類和一個用戶類,如果放在同一個類中,但是當我將它們分開時,我無法弄清楚如何讓用戶類使用DB類連接。PHP的操作系統不能很好地與對方溝通

我有'DBinterface'類和'用戶'類。

*** dbinterface.php

<? class dbinterface { 
    var $dbHost, 
     $dbUser, 
     $dbName, 
     $dbPass, 
     $dbUserTable; 


    function User() { 
     $this->dbHost = 'host': 
     $this->dbUser = 'user'; 
     $this->dbName = 'name'; 
     $this->dbPass = 'pass'; 
     $this->dbUserTable = 'table'; 
    } 

} // End dbinterface class definition ?> 

*** user.php的

<? 
include('dbinterface.php'); 
    class User { 

     var $userID, 
      $userName, 
      $userPassword; 

     function registerUser($userName, $userPassword) { 
      // Connect to database 
      $dbLink = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass); 
      if(!$dbLink) die("Could not connect to database. " . mysql_error()); 

      // Select database 
      mysql_select_db($this->dbName); 

      // Insert data 
      $query = "insert into $this->dbUserTable values (NULL, \"$userName\", \"$userPassword\")"; 
      $result = mysql_query($query); 

      // Test to make sure query worked 
      if(!$result) die("Query didn't work. " . mysql_error()); 

      // Get the user ID 
      $this->userID = mysql_insert_id(); 

      // Close database connection 
      mysql_close($dbLink); 

      // Assign the values to the data members 
      $this->userName = $userName; 
      $this->userPassword = $userPassword; 
     } // End registerUser() ?> 

PS:我已刪除的安全性和其他mumbojumbo,方便易讀性。 任何和所有的幫助是非常appriciated!

+1

你不能只是「分開」類,並希望事情仍然是一樣的。你的用戶類正在引用現在處於完全不同類的東西,當然這不起作用。你需要真正考慮你想如何構建你的類... – deceze

+0

感謝樂觀,但不幸的是,我是PHP新手,仍然在學習。 – user1082764

+0

@ user1082764這與php和更多與您的面向對象的設計和實現很少。我會建議在嘗試使用它們之前學習OOP的基本原理。 – Shoan

回答

3

好吧。我會試着想象你想做什麼:) 你需要一個類,你將存儲數據庫變量,如用戶名,密碼等,第二類將與db-class params一起工作。

/* file1的*/

Class db { 

    private $_dbLink; 
    private $_dbHost = 'host'; 
    private $_dbUser = 'user'; 
    private $_dbName = 'name'; 
    private $_dbPass = 'pass'; 
    private $_dbUserTable = 'table'; 

    public function connect() 
    { 
     $this->_dbLink = mysql_connect($this->_dbHost, $this->_dbUser, $this->_dbPass); 
     if(!$this->_dbLink) 
      throw new Exception ("Could not connect to database. " . mysql_error()); 
    } 

    public function getLink() 
    { 
     return $this->_dbLink; 
    } 

    public function getUserName() 
    { 
     return $this->dbUser; 
    } 

    public function getUserPass() 
    { 
     return $this->_dbPass; 
    } 

    /* create the same methods for each variable */ 
} 

/* file2的*/

Class User { 

    public function registerUser (/* params */) 
    { 
     $db = new db(); 
     $db->connect(); 

     /* your code */ 
     // Select database 
     mysql_select_db($db->getDb(), $db->getLink()); 

     // Insert data 
     $query = "insert into ".$db->getTable()." values (NULL, \"$userName\", \"$userPassword\")"; /* here is SQL-injection */ 
     $result = mysql_query($query, $db->getLink()); 
     /* and so on ...... */ 
    } 
} 

/* file3的*/

// include file1 
// include file2 
$user = new User; 
$user->registerUser(/* params */); 

這是快速的解決方案。你應該學習如何創建類和項目體系結構。使用php.net獲取更多信息。閱讀關於面向對象編程。並閱讀有關安全代碼的SQL注入。

0

$這裏面的User類將只訪問'Class User'中的變量或對象和函數,你不能訪問'class dbinterface'中的變量或對象來訪問你已經將該類擴展到你的User類的變量或對象。你可以嘗試這樣的

class User extends dbinterface { 

} 

這會給你結果。

相關問題