Php 为什么可以';除非我刷新页面,否则我看不到数据库更新吗?
嗯,我编写了一些PHP代码,从我的供应商那里提取库存水平,并根据产品的SKU将库存水平插入数据库。我已经将其插入class.product.php文件中,该文件包含用于单个产品页面的所有代码。我遇到的问题是,当产品页面加载时,除非点击刷新,否则它不会显示更新的库存水平。我已经将代码移到了所有地方,无法让它更新数据库并在显示页面之前加载更新的编号 即使放在所有其他代码之前,我仍然必须刷新页面才能看到更新。我不知道该怎么办。我觉得也许,我并不真正理解PHP是如何加载代码的。几周来我每天都在做这个。我试着把它作为一个包含文件,在一个单独的页面上,在顶部,在中间,在整个地方。 在类文件中,在调用代码以显示库存水平之前,我似乎已经有了代码,这就是为什么我如此困惑,以至于无法加载更新 有没有想过为什么我在刷新页面之前无法看到更改Php 为什么可以';除非我刷新页面,否则我看不到数据库更新吗?,php,xml-rpc,Php,Xml Rpc,嗯,我编写了一些PHP代码,从我的供应商那里提取库存水平,并根据产品的SKU将库存水平插入数据库。我已经将其插入class.product.php文件中,该文件包含用于单个产品页面的所有代码。我遇到的问题是,当产品页面加载时,除非点击刷新,否则它不会显示更新的库存水平。我已经将代码移到了所有地方,无法让它更新数据库并在显示页面之前加载更新的编号 即使放在所有其他代码之前,我仍然必须刷新页面才能看到更新。我不知道该怎么办。我觉得也许,我并不真正理解PHP是如何加载代码的。几周来我每天都在做这个。我
谢谢 PHP在您请求时加载内容, 所以打开一个页面只会得到一次内容 要更新数据,您需要对返回JSON或XML格式数据的php函数进行AJAX调用
在这里,您可以看到一些,但考虑Google围绕更详细的例子。 < P>问题是,直到代码获得和显示产品数据之后,我的代码才运行,因为我使用的是只被调用一次的产品数据的信息。因此,必须首先调用产品数据才能运行我的代码。因此,为了解决这个问题,我必须创建一个新函数来获取sku,并在调用产品数据的代码显示在页面上之前将其传递给我的代码。我复制了现有函数以获取产品数据,将其重命名为GetRealTimeStockLevel,并将代码添加到其底部。我把对函数的调用放在对产品数据的调用之上,它按照我想要的方式工作。我很高兴我解决了这个问题,现在我可以在结帐页面上添加相同的功能 下面是页面开头的函数调用,然后是我为运行更新代码而创建的函数
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);
}
我能想到的唯一问题是缓存。特别是IE。我们需要看一些代码来真正提供帮助。谢谢。现在我将发布一些代码,我想我会得到一些类似Aviatrix的东西,其中提到了PHP如何访问内容谢谢我已经修好了。我将发布我问题的答案。谢谢你的信息。我不知道它只处理代码一次,这就是我无法让它工作的原因。