Как обновить таблицу базы данных, используя данные из xml-rpc? - PullRequest
1 голос
/ 21 декабря 2010

Я хотел бы сказать спасибо за любые ответы сразу. Я буду очень признателен за вашу помощь.

ОБНОВЛЕНИЕ Я только что прочитал на этом сайте, что кто-то упоминает типы данных xml и хранимые процедуры. Теперь я подумал, что поиска xml-rpc и обновления базы данных было недостаточно. Я ищу, как использовать данные XML для обновления базы данных. Но если у вас все еще есть мысли по моим вопросам ниже, я буду признателен за них.

Я гуглил и искал на этом сайте возможность и возможность использования данных, извлеченных с удаленного сервера через xml-rpc, для обновления таблицы базы данных, и я ничего не мог найти о том, как это сделать. Я нашел массу полезной информации о xml-rpc (я новичок в этом), и команда SQL для обновления таблицы базы данных довольно проста. Но как же я могу использовать данные, которые я получаю, используя xml-rpc для обновления таблицы?

Я думаю, это потому, что я, вероятно, не полностью понимаю xml-rpc. У меня есть корзина для покупок, и все, что я хочу сейчас сделать, это получить данные о запасах у моего поставщика. Когда пользователи нажимают на ссылку на продукт, мне нужно захватить уровни запасов в реальном времени и вставить эти номера уровней запасов в мою таблицу инвентаризации продуктов для этого конкретного продукта (так что это на лету).

Я заглянул в php-файл, где скрипт корзины извлекает уровень запасов товара из базы данных. Кажется, я бы добавил две вещи прямо перед этим захватом. 1. Вызов xml-rpc для получения уровня запасов по sku и 2. Команда обновления SQL для вставки этих данных в базу данных.

Но как только я сделаю вызов xml-rpc, он вернет уровень запасов, куда эти данные попадают? Из моего прочтения кажется, что эти данные открываются пользователю посредством какой-либо распечатки или отображения результатов непосредственно в веб-браузере. Но вместо этого мне нужно переместить эти данные в таблицу базы данных.

Есть мысли? Это возможно?

Это функция, которую я отредактировал, чтобы попытаться получить уровни запасов и обновить таблицу: я добавил эти два раздела в существующую функцию - // Получение уровня запасов по sku от поставщика, // Обновление инвентарной таблицы по sku

<code>  /**
   * Show the inventory management quick view on the manage products page if inventory tracking is on for a product
   *
   * @return void
   **/
  private function GetInventoryLevels()
  {
   $GLOBALS['ISC_CLASS_ADMIN_ENGINE']->LoadLangFile('products');

   if(isset($_REQUEST['p']) && isset($_REQUEST['i']) && isset($_REQUEST['v']) && isset($_REQUEST['t'])) {
    $prodId = (int)$_REQUEST['p'];
    $invType = (int)$_REQUEST['i'];
    $variationId = (int)$_REQUEST['v'];
    $combinations = array();

    // First determine if inventory tracking is by product or by option
    if ($invType == 1) {
     **// Grab inventory level by sku from supplier**
     $server_url = "http://gg.com/ttt/webservices/index.php";
     $prodcurrentinv = "";
      if (function_exists('xmlrpc_encode_request')) {
      $request = xmlrpc_encode_request("catalog.getStockQuantity(sku)", array($prodcurrentinv));
      $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);
      if (xmlrpc_is_fault($response)) {
      trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
      } else {
      print '<pre>';
      print_r($response);
      print '
'; } } еще { print '
К сожалению, вы, похоже, не скомпилировали модуль xmlrpc.
'; } напечатать '
'; require_once 'XML / RPC2 / Client.php'; // так как мы используем функцию 'catalog', нам нужно убедиться, что она префиксует функцию // имя, когда он вызывается на сервере. (Документы XML_RPC2 предполагают, что вы можете использовать // 'catalog.getStockQuantity (sku)' как имя функции класса, но это не правильно. $ options = array ( 'prefix' => "каталог." ); $ client = XML_RPC2_Client :: create ($ server_url, $ options); $ result = $ client-> getStockQuantity (sku) ($ prodcurrentinv); print '
';
      print_r($result);
      print '
'; напечатать '
'; ** // Обновление инвентарной таблицы по sku ** $ query = sprintf ("обновить prodcurrentinv из [| PREFIX |] продуктов, где productcode = '% d'",) // Просто запрашиваем таблицу продуктов на предмет текущего и низкого уровня запасов $ query = sprintf ("выберите prodcurrentinv, prodlowinv из [| PREFIX |] продуктов, где productid = '% d'", $ GLOBALS ['ISC_CLASS_DB'] -> Quote ($ prodId)); $ result = $ GLOBALS ['ISC_CLASS_DB'] -> Query ($ query); if ($ row = $ GLOBALS ['ISC_CLASS_DB'] -> Fetch ($ result)) { printf ("% s ", GetLang ("UpdateInventoryLevels")); echo ""; echo ""; echo " image "; printf ("% s: ", GetLang ("CurrentStock")); printf (" ", $ row ['prodcurrentinv '], $ prodId, $ prodId); echo ""; echo ""; echo ""; printf ("% s: ", GetLang ("LowStockLevel"));printf (" ", $ row ['prodlowinv '], $ prodId, $ prodId); echo ""; echo ""; printf (" & nbsp; image ", GetLang (« Save »), $ prodId, $ prodId); } } еще { $ optionIds = array (); // Извлечение комбинаций вариантов для этого продукта $ query = "SELECT * FROM [| PREFIX |] product_variation_combination WHERE vcproductid = '". $ prodId. "'"; $ result = $ GLOBALS ['ISC_CLASS_DB'] -> Query ($ query); while ($ комбинация = $ GLOBALS ['ISC_CLASS_DB'] -> Fetch ($ result)) { $ комбинации [] = $ комбинация; $ optionIds = array_merge ($ optionIds, explode (",", $ комбинация ['vcoptionids'])); } $ optionIds = array_unique ($ optionIds); // Теперь извлекаем варианты, которые нам нужны if (! empty ($ optionIds)) { $ optionIds = implode (",", $ optionIds); // Получить параметры комбинации $ Варианты = массив (); $ query = "SELECT * FROM [| PREFIX |] product_variation_options WHERE voptionid IN (". $ optionIds. ")"; $ result = $ GLOBALS ['ISC_CLASS_DB'] -> Query ($ query); while ($ var = $ GLOBALS ['ISC_CLASS_DB'] -> Fetch ($ result)) { $ Варианты [$ Вариация ['voptionid']] = массив ($ Вариация ['voname'], $ Вариация ['vovalue']); } } printf ("% s ", GetLang ("UpdateInventoryLevels")); foreach ($ комбинаций как $ строки) { $ output = ""; $ options = explode (",", $ row ['vcoptionids']); foreach ($ options как $ option) { $ output. = isc_html_escape ($ Вариации [$ опция] [0]). ":". isc_html_escape ($ Варианты [$ вариант] [1]). ","; } $ output = trim ($ output, ','); эхо "". $ вывод. ""; echo "
"; echo ""; echo ""; echo " image "; printf ("% s: ", GetLang ("CurrentStock")); printf (" ", $ row ['vcstock'], $ prodId, $ row ['комбинация'], $ prodId, $ row ['комбинация']); echo ""; echo ""; echo ""; printf ("% s: ", GetLang ("LowStockLevel")); printf (" ", $ row ['vclowstock'], $ prodId, $ row ['комбинация'], $ prodId, $ row ['комбинация']); echo ""; echo ""; } echo ""; printf (" & nbsp; image ", GetLang (' Save '), $ prodId, $ prodId); } } }

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

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

                                //Grab the stock level of the item from supplier server
                $query = sprintf("SELECT prodcode FROM [|PREFIX|]products where productid='%d'",
                $GLOBALS['ISC_CLASS_DB']->Quote($prodId));
        $result = $GLOBALS['ISC_CLASS_DB']->Query($query);
                             $product_sku = mysql_fetch_row($result);
                             $product_sku2 = $product_sku[0];

 $server_url = "http://m.com/fvg/webservices/index.php";

 $request = xmlrpc_encode_request("catalog.getStockQuantity", array($product_sku2));
 $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 productid='%d'", $GLOBALS['ISC_CLASS_DB']->Quote($prodId)); 
$result = $GLOBALS['ISC_CLASS_DB']->Query($query);
0 голосов
/ 21 декабря 2010

Информация должна быть прямо в вашем ответе. Вы пробовали var_dump ($ response) посмотреть, какая у вас информация?

Xml-Rpc это просто протокол, используемый для связи между клиентом и сервером. Это на самом деле не очень продвинуто, и структуру массива легко использовать для связи без проблем.

То, что отвечает сервер, должно быть прямо в var $ response.

...