2011-01-10 7 views
0

Hmmmmm 내 공급 업체의 재고 수준을 끌어와 제품의 SKU를 기준으로 재고 수준을 데이터베이스에 삽입하는 일부 PHP 코드를 작성했습니다. 개별 제품 페이지에 사용 된 모든 코드가 들어있는 class.product.php 파일에이 파일을 삽입했습니다. 문제는 제품 페이지가로드 될 때 새로 고침하지 않으면 업데이트 된 인벤토리 수준을 표시하지 않는다는 것입니다. 코드를 옮겨서 데이터베이스를 업데이트하고 페이지가 표시되기 전에 업데이트 된 번호가로드되도록 할 수 없습니다.페이지를 새로 고치지 않으면 왜 데이터베이스 업데이트를 볼 수 없습니까?

다른 모든 코드보다 먼저 배치해도 페이지를 새로 고쳐야 업데이트가 표시됩니다. 나는 이것에 대해 무엇을해야할지 모르겠습니다. 아마도 나는 PHP가 코드를 어떻게로드하는지 실제로 이해하지 못합니다. 나는 매일 몇 주 동안이 일을 해왔다. include 파일, 별도의 페이지, 상단, 중간, 모든 곳에서 실행 해 보았습니다.

클래스 파일에서 주식 레벨을 표시하기 위해 코드를 호출하기 전에 코드가있는 것처럼 보입니다. 그래서 내가 업데이트를로드하지 않는 이유에 대해 혼란 스럽습니다.

페이지를 새로 고침하지 않으면 변경 사항을 볼 수없는 이유에 대한 의견이 있으십니까?

감사합니다.

+0

유일한 문제는 캐싱입니다. 특히 IE입니다. – benhowdle89

+1

정말 도움이되는 코드가 필요합니다. – Rudu

+0

감사합니다. 몇 가지 코드를 게시 하겠지만 PHP가 콘텐츠에 액세스하는 방법에 대해 언급 한 Aviatrix와 같은 것을 얻을 것이라고 생각했습니다. :) – Tsanders

답변

1

PHP는

업데이트 된 데이터를 얻을하고 싶은 것은 AJAX는 JSON 데이터를 반환하는 PHP 함수를 호출해야하고, 내용이 당신이 그것을 요청할 때, 그렇게 페이지를 열면 ONCE 내용을 얻는다로드 또는 XML 형식 여기서 examples을 볼 수 있지만 더 자세한 예제는 인터넷 검색을 고려하십시오.

+0

고마워요! 나는 그것을 고쳤다. 나는 내 질문에 대한 답변을 게시 할 것이다. 정보 주셔서 감사합니다. 코드를 한 번만 처리한다는 것을 알지 못하는 이유는 그것이 작동하지 못하는 이유입니다. – Tsanders

0

문제점은 한 번만 호출 된 제품 데이터의 정보를 사용했기 때문에 코드가 제품 데이터를 가져와 표시 할 때까지 실행되지 않았습니다. 따라서 코드를 실행하기 위해 먼저 제품 데이터를 호출해야했습니다. 그래서이 문제를 해결하기 위해 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); 


    } 
관련 문제