1

これには簡単な答えがあると確信していますが、私はほぼ 1 週間、すべてを手探りして降伏しました。ショッピング カート アプリを作成しようとしていますが、作成したすべてのコーディング ソリューションは、同じページにコードを含めると機能しますが、外部ページを使用して関数を実行しようとすると、データが返されないようです。何が起こっているのかを判断するために、さまざまな監視手法を試しました。

メインページのコードは次のとおりです。

<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <title>Cart Connection</title>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>

    <body>
            <p>Will this display?</p>
            <p><a href='<?php echo "showCart.php?PHPSESSID=" . session_id() ?>'>View Cart</a></p>

            <?php
                $Database = "L3TtL2B5DdY";
                $Table = "tblProds";

                if (isset($_SESSION['curCart']))
                    $Cart = unserialize($_SESSION['curCart']);
                else
                {
                    if (class_exists("shoppingCart"))
                    {
                        $Cart = new shoppingCart();
                        $Cart->setDatabase($Database);
                        echo ("<p>If statement ran successfully</p>");
                    }
                    else
                        exit("<p>The shoppingCart class is not available!");
                }


                $Cart->setTable($Table);
                $Cart->getProductList();
                $_SESSION['curCart'] = serialize($Cart);
            ?>
            <p><a href='<?php echo "showCart.php?PHPSESSID=" . session_id() ?>'>View Cart</a></p>

    </body>
</html>

「shoppingCart.php」ページの関連コードは次のとおりです。

<?php
    class shoppingCart
    {
        private $dbConn = "";
        private $dbName = "";
        private $tableName = "";
        private $orders = array();
        private $orderTable = array();

        function _construct()
        {
            $this->dbConn = @new mysqli("localhost", "root", "");
                if (mysqli_connect_errno()) 
                    die("<p>Unable to connect to the database server.</p>" . "<p>Error Code " . 
                    mysqli_connect_errno() . ": " . mysqli_connect_error() . "</p>");
        }

        public function setDatabase($Database)
        {
            $this->dbName = $Database;
            @$this->dbConn->select_db($this->dbName)
                Or die("<p>Unable to select the database.</p>" . "<p>Error code " . mysqli_errno($this->dbConn) . 
                ": " . mysqli_error($this->dbConn) . "</p>");
        }

        public function setTable($Table)
        {
            $this->tableName = $Table;
        }

        public function getProductList()
        {
            $sqlString = "SELECT prodID, prodName, prodPrice FROM $this->tableName";
            @$qryResult = $this->dbConn->query($sqlString)
                Or die("<p>Unable to perform the query.</p>" . "<p>Error code " . mysqli_errno($this->dbConn) . 
                ": " . mysqli_error($this->dbConn) . "</p>");
            echo "<table width='100%' border='1'>";
            echo "<tr><th>Product ID</th><th>Product Name</th><th>Product Price</th><th>Select Item</th></tr>";
            $row = $qryResult->fetch_row();
            do
            {
                echo "<tr><td>{$row[0]}</td>";
                echo "<td>{$row[1]}</td>";
                echo "<td>{$row[2]}</td>";
                echo "<td><a href='showCart.php?PHPSESSID=" . session_id() . "&operation=addItem&productID=" . $row[0] . 

"'>Add</a></td></tr>";
                $row = $qryResult->fetch_row();
            } while ($row);
            echo "</table>";
        }

......
?>

メインページを読み込もうとすると、2つが表示されます

行、それだけです。最初にコードを作成したときにすべてのエラーをデバッグし、それが機能すると考えました。このページの元のバージョンを書いたとき、同じページに「接続」コードを配置し、テーブルが正常に表示されたので、他に何ができるかわかりません。Windows XP ボックスに WAMP をインストールしましたが、問題なく動作しているようです。どのプログラムの構成ファイルにも触れていませんが、他のすべてのテスト コードは問題なく動作しているようです。外部ファイルに接続しようとしたときです。私の脳がどろどろになっていると思うので、どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

1

おそらく、メイン ページに ShoppingCart.php ファイルを含める必要があるため、ShoppingCart クラスの定義が含まれています。あなたのメインページの一番上に置いてみてください:

<?php require('ShoppingCart.php'); ?>

私が考えているのは、カート オブジェクトがセッションからシリアル化されていないことですが、クラス定義がないため、不完全なクラスのインスタンスになります。その上でメソッドを呼び出すと、致命的なエラーが発生します。おそらく役に立たないのは、エラーが表示されていない可能性があるため、スクリプトが終了することです。メインページの上部に次のように配置することもできます。

<?php ini_set('display_errors', true); ?> 

これにより、PHP エラーが表示されるようになります。

編集

セッションにデータベース接続を保存できないことに注意してください。リクエストごとにサーバーに接続/データベースなどを選択する必要があります。あなたのスクリプトが現在それを行っているとは思いません。

また、シリアル化を気にせずにオブジェクトをセッションに保存できます。簡単な例を次に示します。

<?php
//include class definition before starting session.
require('ShoppingCart.php');

session_start();

if (!isset($session['cart'])) {
    $session['cart'] = new ShoppingCart();
}

$cart = $session['cart'];

//do stuff to cart
$cart->doSomething();

//changes are now saved back to the session when the script is terminated, without you having to do anything.
于 2009-06-11T22:54:28.880 に答える
0

必要がある

include_once("ShoppingCart.php");

ファイルを含めるさまざまな方法を読んでください

http://www.w3schools.com/PHP/php_includes.asp

于 2009-06-11T22:53:02.050 に答える