2009-06-11 2 views
1

これには簡単な答えがあると確信していますが、今は一週間近くすべてのものを揺らしています。私はショッピングカートアプリを構築しようとしています。同じページにコードを含めると、すべてのコーディングソリューションが動作しますが、外部ページを使用して関数を実行しようとすると、データを返さないようです。私は何が起こっているのかを判断するために様々な監視技術を試しました。私はメインページをロードしようとするとPhPで外部ファイルへの関数呼び出しをしようとすると、WAMPを使用しているMySQL

<?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>"; 
     } 

...... 
?> 

<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」ページに関連するコードです:ここでは

は、メインページのコードがありますそれは2つの

行を表示し、それだけです。コードを最初に作成したときにすべてのエラーをデバッグし、それが機能すると思った。私がこのページのオリジナル版を書いたとき、私は同じページに「接続」コードを入れました。表はうまく表示されました。それで他に何ができるのか分かりません。 Windows XPのボックスにWAMPをインストールしましたが、うまくいくようです。私はプログラムのいずれかの設定ファイルに触れていないし、私の他のすべてのテストコードは正常に動作するようです。それは私が外部ファイルに連絡しようとするときです。 私の頭脳がぼんやりと変わっていると思うので、助けてくれれば大いに感謝します。 おかげでとても

答えて

1

を含めるためにさまざまな方法をよく読んで

include_once("ShoppingCart.php"); 

する必要があり、 ShoppingCartクラスの定義があります。あなたのメインページの最上部に入れてみてください:私が起こってかもしれないと思う何

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

は、カートオブジェクトがセッションからunserialised取得されますが、何のクラス定義が存在しないので、それが不完全のインスタンスになることですクラス。その上でメソッドを呼び出すと、致命的なエラーが発生します。たぶん役立たないのは、エラーを表示していない可能性があるので、スクリプトが終了するだけです。

<?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. 
+0

グッドコール:

また、あなたはシリアル化についての自分を気にせず、セッション内のオブジェクトを格納することができ、ここでは簡単な例です。 –

+0

私はメインページからコード全体をコピーしたと思った。私は必要なコードを追加しました。これは私が既に投稿したコードの前にあるものです: <?PHP \t require_once( "shoppingCart.php"); \t session_start(); \t $ _SESSION ['curCart']; ?><!DOCTYPE html PUBLIC " - // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict-dtd"> < HTMLのxmlns = "http://www.w3.org/1999/xhtml"> \t \t \t カート接続 \t \t \t ... –

+0

質問を編集できます – David

関連する問題