2013-04-17 2 views
0

Здравствуйте, я сделал быстрый код для вставки имени в базу данных.OOP Mistake Вызов функции-члена 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> 

Проблема:

При передаче данных (после завершения заполнения формы) Я получаю следующее сообщение об ошибке:

Фатальная ошибка: Вызов функция-член insertName() для не-объекта в C: \ xampp \ htdocs \ oop \ index.php в строке 17

Что я сделал не так? Это строка 17:

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

Как я могу это исправить и в чем проблема?

Thnaks.

После изменения его от $ дб на фактическое имя класса, я получаю это:

Вызов неопределенной базы данных метода :: insertName() в C: \ XAMPP \ HTDOCS \ уп \ index.php на линия 17

EDIT:

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(); 

Wh y вы используете $Database, когда вы вызвали переменную $db?

Использование:

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

После ТО редактировал вопрос:

Метод insertName находится в System классе. Поэтому используйте $system->insertName(...);.

+0

Только что заметил, что .. Но обновил вопрос – user2286576

+0

@ user2286576 Обновлен мой ответ. – bwoebi

+0

Теперь я избавился от всех ошибок, но, похоже, ничего не вставляет в базу данных !. Любая идея почему? – user2286576

2

Похоже, у вас есть две проблемы. Первое, вы пытаетесь вызвать метод для переменной, которая не определена. В config.php вы определяете объект Database как $db, а не $Database.Во-вторых, метод insertName() определен в классе System не Database.

Попробуйте изменить строку $system->insertName($_POST['name'])

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