0

こんにちは、名前をデータベースに挿入する簡単なコードを作成しました。

これはデータベース接続用のクラスです:

(私はパスワードなどを非表示にします。基本的には上部で定義します)

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>

問題:

データを送信するとき (フォームを送信した後)、次のエラーが表示されます。

致命的なエラー: 17 行目の C:\xampp\htdocs\oop\index.php の非オブジェクトに対するメンバー関数 insertName() の呼び出し

私は何を間違えましたか?これは17行目です:

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

これを修正するにはどうすればよいですか?また、何が問題なのですか?

タナクス。

$db からクラスの実際の名前に変更すると、次のようになります。

C:\xampp\htdocs\oop\index.php の 17 行目の未定義メソッド Database::insertName() の呼び出し

編集:

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

2 に答える 2

2

2 つの問題があるようです。1 つ目は、定義されていない変数に対してメソッドを呼び出そうとしています。config.php では、Database オブジェクトを$dbではなくとして定義します$Database。次に、メソッドinsertName()はクラスSystemnotで定義されDatabaseます。

行を次のように変更してみてください$system->insertName($_POST['name'])

于 2013-04-17T17:30:18.437 に答える
1

私は引用します:

$db = new Database();

$Database変数を呼び出したときになぜ使用するのです$dbか?

使用する:

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

TO が質問を編集した後:

メソッドinsertNameSystemクラスにあります。を使用します$system->insertName(...);

于 2013-04-17T17:28:01.640 に答える