2013-04-17 49 views
0

你好我已經做了一個快速代碼插入名稱到數據庫中。OOP錯誤調用一個非對象的成員函數insertName()

這是數據庫連接類:

(我隱藏密碼等,基本上我在上面定義它們)

class Database 
{ 
    private $pdo; 
    private $query; 
    public function __construct() 
    { 
     try 
     { 
      $this->pdo = new PDO('mysql:host='.MYSQL_HOST.';dbname=oop', MYSQL_USER, MYSQL_PASSWORD); 
      $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      echo 'Sucessfully connected to MySQL server!'; 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 
    } 

    public function query($name) 
    { 
     $this->query = $this->pdo->prepare("INSERT INTO user (name) VALUES (:name)"); 
     $this->query->bindValue(":name", $name); 
     $this->query->execute(); 
     echo 'Sucessfully send!'; 
    } 
} 

這是我基本上使用的查詢和處理類他們來自:

class System 
{ 
    private $Database; 

    public function __construct(Database $Database = null) 
    { 
     $this->Database = $Database; 
    } 

    public function insertName($name) 
    { 
     if ($this->db != null) 
     { 
      $this->db->query($name); 
     } 
    } 
} 

這是config.php文件

include("system.class.php"); 
include("db.class.php"); 

$system = new System($Database); 
$db = new Database(); 

這是index.php文件

<?php 

include("config.php"); 

?> 

<html> 
<form action="" method="post"> 
<input type="text" name="name"> 
<input type="submit"> 
</form> 

<?php 

    if (isset($_POST) && !empty($_POST['name'])) 
    { 
     $Database->insertName($_POST['name']); 
     echo 'Scessfuly inserted!'; 
    } 
?> 
</html> 

問題:

當發送數據(submiting形式之後)我得到以下錯誤:

致命錯誤:調用第17行中的C:\ xampp \ htdocs \ oop \ index.php中的非對象上的成員函數insertName()

我做錯了什麼?這是第17行:

$Database->insertName($_POST['name']); 

我怎樣才能解決這個問題,什麼問題呢?

Thnaks。

調用未定義的方法數據庫:: insertName()在C:

改變它從$分貝到類我得到這個的實際名稱後\ XAMPP \ htdocs中\接力\的index.php上線17

編輯:

if (isset($_POST) && !empty($_POST['name'])) 
{ 
    $system->insertName($_POST['name']); 
    echo 'Scessfuly inserted!'; 
} 


class System 
{ 
    private $Database; 

    public function __construct(Database $Database = null) 
    { 
     $this->Database = $Database; 
    } 

    public function insertName($name) 
    { 
     if ($this->Database != null) 
     { 
      $this->Database->query($name); 
     } 
    } 
} 
+0

'$ DB-> insertName($ _ POST [ '名']);'用這個,然後告訴我。 –

+0

@GauravVashishtha'$ Db'!='$ db'。 – bwoebi

+0

@bwoebi你說的是什麼? –

回答

1

我引述:

$db = new Database(); 

瓦你是否在調用變量$db時使用$Database

用途:

$db->insertName($_POST['name']); 

後已編輯的問題:

方法insertNameSystem類。所以使用$system->insertName(...);

+0

剛剛注意到..但更新了問題 – user2286576

+0

@ user2286576更新了我的答案。 – bwoebi

+0

我現在擺脫了所有的錯誤,但它似乎沒有插入任何東西到數據庫!任何想法爲什麼? – user2286576

2

看起來你有兩個問題。首先,你正試圖調用一個未定義變量的方法。在config.php中,將數據庫對象定義爲$db,而不是$Database。其次,方法insertName()在類別System而不是Database中定義。

嘗試改變線$system->insertName($_POST['name'])

相關問題