1

クレジットカードの詳細をデータベースに保存したい「CDストア」プログラムを作成しようとしていますが、データベースが他の場所で作成したユーザーのIDを参照するようにします。別のオブジェクトから新しいオブジェクトにパラメーターを渡すにはどうすればよいですか? コードを書き込もうとしましたが、このエラーが発生し続けます

Fatal error: Call to a member function getId() on a non-object in applications/XAMPP/xamppfiles/htdocs/CDStore/creditCardAccess.php on line 36

参照されていない可能性があり、$user 変数が netbeans で黄色に表示されていることはわかっています。これについてどうすればよいかわかりませんか?どんなポインタでも大歓迎です。ここに私のコードがあります

<?php

class creditCardAccess {

protected $link;

public function __construct() {
    $host = "localhost";
    $username = "root";
    $password = "";
    $database = "CDStore";

    $dsn = "mysql:host=$host;dbname=$database";

    $this->link = new PDO($dsn, $username, $password);
    $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

public function __destruct() {
    $this->link = null;
}
public function insertCreditCard($creditCard) {
    if (!isset($creditCard) && $creditCard != null) {
        throw new Exception("Credit Card Required");
    }

    $sql = "INSERT INTO creditCards(cardType, cardName, cardNumber, cardExpiryDate, cardCCV, userID)"
            . "VALUES (:cardType, :cardName, :cardNumber, :cardExpiryDate, :cardCCV, :userID)";

    $params = array(
        'cardType' => $creditCard->getCardType(),
        'cardName' => $creditCard->getCardName(),
        'cardNumber' => $creditCard->getCardNumber(),
        'cardExpiryDate' => $creditCard->getCardExpiryDate(),
        'cardCCV' => $creditCard->getCardCCV(),
        'userID' => $user->getId()
    );

    $stmt = $this->link->prepare($sql);
    $status = $stmt->execute($params);
    if ($status != true) {
        $errorInfo = $stmt->errorInfo();
        throw new Exception("Could Not Add Credit Card: " . $errorInfo[2]);
    }

    $id = $this->link->lastInsertId('creditCard');
    $creditCard->setId($id);
}

}
?>

36 行目は 'userID' => $user->getId() です

4

2 に答える 2

1

$user オブジェクトをパラメータとして関数に渡す必要があります。そうしないと、$user への可視性がなくなります

public function insertCreditCard($creditCard, $user) {
于 2013-02-28T23:46:33.793 に答える
1

まず、このファイルにユーザー クラスを含めます。次に、クラスにユーザー プロパティを作成します。コンストラクターで、ユーザー クラスのインスタンスを作成します。その後、ユーザー クラス関数を使用できます。

<?php

require_once("user.class.php"); //the user management class path

class creditCardAccess {

protected $link;

var $user;

public function __construct() {
    $host = "localhost";
    $username = "root";
    $password = "";
    $database = "CDStore";

    $dsn = "mysql:host=$host;dbname=$database";

    $this->link = new PDO($dsn, $username, $password);
    $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $this->user = new User();
}

public function __destruct() {
    $this->link = null;
}
public function insertCreditCard($creditCard) {
    if (!isset($creditCard) && $creditCard != null) {
        throw new Exception("Credit Card Required");
    }

    $sql = "INSERT INTO creditCards(cardType, cardName, cardNumber, cardExpiryDate, cardCCV, userID)"
            . "VALUES (:cardType, :cardName, :cardNumber, :cardExpiryDate, :cardCCV, :userID)";

    $params = array(
        'cardType' => $creditCard->getCardType(),
        'cardName' => $creditCard->getCardName(),
        'cardNumber' => $creditCard->getCardNumber(),
        'cardExpiryDate' => $creditCard->getCardExpiryDate(),
        'cardCCV' => $creditCard->getCardCCV(),
        'userID' => $user->getId()
    );

    $stmt = $this->link->prepare($sql);
    $status = $stmt->execute($params);
    if ($status != true) {
        $errorInfo = $stmt->errorInfo();
        throw new Exception("Could Not Add Credit Card: " . $errorInfo[2]);
    }

    $id = $this->link->lastInsertId('creditCard');
    $creditCard->setId($id);
}

}
?>
于 2013-02-28T23:43:44.157 に答える