Почему я не вижу обновления базы данных, если не обновляю страницу? - PullRequest
0 голосов
/ 10 января 2011

Хммммм. Я работал над некоторым кодом PHP, который извлекает уровни запасов от моего поставщика и вставляет уровень запасов в базу данных на основе SKU продукта. Я вставил его в файл class.product.php, который содержит весь код, используемый для отдельной страницы продукта. Проблема, с которой я столкнулся, заключается в том, что при загрузке страницы продукта она не отображает обновленные уровни запасов, если вы не нажмете обновить. Я переместил код повсюду и не могу заставить его обновить базу данных и загрузить обновленный номер перед отображением страницы.

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

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

Есть мысли о том, почему я не вижу изменений, если не обновляю страницу?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 января 2011

PHP загружает содержимое, когда вы запрашиваете его, поэтому при открытии страницы содержимое ОДНАЖДЫ,

Чтобы обновлять данные, вам нужно иметь вызовы AJAX в функцию php, которая возвращает данные в JSONили в формате XML Здесь вы можете увидеть примеров , но рассмотрите возможность поиска более подробных примеров.

0 голосов
/ 10 января 2011

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

Ниже приведен вызов функции в начале страницы, а затем функция, которую я создал для запуска моего кода обновления.

    public function __construct($productid=0)
    {
        // Get the stock level from supplier and update the database
        $this->_GetRealtimeStockLevels($productid);

        // Load the data for this product
        $this->_SetProductData($productid);

    public function _GetRealtimeStockLevels($productid=0)
    {

        if ($productid == 0) {
            // Retrieve the query string variables. Can't use the $_GET array
            // because of SEO friendly links in the URL
            SetPGQVariablesManually();
            if (isset($_REQUEST['product'])) {
                $product = $_REQUEST['product'];
            }
            else if(isset($GLOBALS['PathInfo'][1])) {
                $product = preg_replace('#\.html$#i', '', $GLOBALS['PathInfo'][1]);
            }
            else {
                $product = '';
            }


            $product = $GLOBALS['ISC_CLASS_DB']->Quote(MakeURLNormal($product));
            $productSQL = sprintf("p.prodname='%s'", $product);
        }
        else {
            $productSQL = sprintf("p.productid='%s'", (int)$productid);

        }

        $query = "
            SELECT p.*, FLOOR(prodratingtotal/prodnumratings) AS prodavgrating, pi.*, ".GetProdCustomerGroupPriceSQL().",
            (SELECT COUNT(fieldid) FROM [|PREFIX|]product_customfields WHERE fieldprodid=p.productid) AS numcustomfields,
            (SELECT COUNT(reviewid) FROM [|PREFIX|]reviews WHERE revstatus='1' AND revproductid=p.productid AND revstatus='1') AS numreviews,
            (SELECT brandname FROM [|PREFIX|]brands WHERE brandid=p.prodbrandid) AS prodbrandname,
            (SELECT COUNT(imageid) FROM [|PREFIX|]product_images WHERE imageprodid=p.productid) AS numimages,
            (SELECT COUNT(discountid) FROM [|PREFIX|]product_discounts WHERE discountprodid=p.productid) AS numbulkdiscounts
            FROM [|PREFIX|]products p
            LEFT JOIN [|PREFIX|]product_images pi ON (pi.imageisthumb=1 AND p.productid=pi.imageprodid)
            WHERE ".$productSQL;

        if(!isset($_COOKIE['STORESUITE_CP_TOKEN'])) {
            // ISC-1073: don't check visibility if we are on control panel
            $query .= " AND p.prodvisible='1'";
        }

        $result = $GLOBALS['ISC_CLASS_DB']->Query($query);
        $row = $GLOBALS['ISC_CLASS_DB']->Fetch($result);

        if (!$row) {
            return;
        }

        $this->_product = $row;
        $this->_prodid = $row['productid'];
        $this->_prodname = $row['prodname'];
        $this->_prodsku = $row['prodcode'];


        $GLOBALS['CurrentProductLink'] = ProdLink($this->_prodname);


                   $server_url = "http://ms.com/fgy/webservices/index.php";

                   $request = xmlrpc_encode_request("catalog.getStockQuantity", array($this->_prodsku));
                   $context = stream_context_create(array('http' => array(
                   'method' => "POST",
                   'header' => "Content-Type: text/xml",
                   'content' => $request
                    )));
                   $file = file_get_contents($server_url, false, $context);
                   $response = xmlrpc_decode($file);

                   $query = sprintf("UPDATE [|PREFIX|]products SET prodcurrentinv='$response' where prodcode='%s'",    $GLOBALS['ISC_CLASS_DB']->Quote($this->_prodsku)); 
                   $result = $GLOBALS['ISC_CLASS_DB']->Query($query);


    }
...