Попытка сделать вызов функции для внешнего файла с PhP, MySQL с помощью WAMP - PullRequest
1 голос
/ 12 июня 2009

Я уверен, что есть простой ответ на этот вопрос, но я уже почти неделю возуюсь со всем и сдаюсь. Я пытаюсь создать приложение для корзины покупок, и каждое построенное мной решение для кодирования будет работать, когда я добавляю код на одну и ту же страницу, но когда я пытаюсь использовать внешнюю страницу для запуска функции, похоже, данные не возвращаются. Я попробовал различные методы мониторинга, чтобы определить, что происходит.

Вот код для главной страницы:

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

......
?>

Когда я пытаюсь загрузить главную страницу, она отображает две строки

, и это все. Я отладил все ошибки, когда впервые создал код, и подумал, что он будет работать. Когда я писал оригинальную версию этой страницы, я поместил код «соединения» на ту же страницу, и таблица отображалась нормально, поэтому я не знаю, что еще это могло быть. Я установил WAMP на свой Windows XP, и он, кажется, работает нормально. Я не коснулся файлов конфигурации ни для одной из программ, и весь мой другой тестовый код, кажется, работает нормально. Это просто когда я пытаюсь связаться с внешним файлом. Любая помощь будет принята с благодарностью, так как я думаю, что мой мозг превращается в кашу. Спасибо

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Возможно, вам нужно включить файл 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.
0 голосов
/ 12 июня 2009

Вам нужно

include_once("ShoppingCart.php");

Ознакомьтесь с различными способами включения файлов

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

...