Update SQL from XML with PHP

nanera

Registered
Здравейте,

Искам да уточня, че пратя това за клиент, като целта е да се синхронизират количествата на продукти еднократно (ръчно) между Microinvest с WooCommerce.
Правя това безвъзмездно. Няма да взема пари от клиента и няма да продавам кода. Надявам се да успея да го направя като WordPress plugin (безплатен) за всички, които биха го ползвали.
За тази цел имам нужда от помощ.

Имам XML файл с данни, които дава Microinvest, като от тях трябва да взема количествата и да ги синхронизирам (заменя) със стойности в SQL бази данни на хостинга.

С кода долу успявам да изведа уникално ID (IDПродуктXML) на продукта и неговото количество (QtyПродуктXML) от XML файла:

$xmldata = simplexml_load_file("goods.xml") or die("Failed to load");
foreach($xmldata->children() as $empl) {
echo $empl->Code . ", ";
echo (round($empl->StoreQuantities->StoreQuantity->ItemQuantity)) . "<br>";
}


Примерен резултат: 1075, 3
Условно определям IDПродуктXML - 1075, QtyПродуктXML - 3

SQL таблицата има следните колони - meta_id, post_id, meta_key, meta_value.

Примерни данни:
meta_id | post_id | meta_key | meta_value.
53716 | 22094 | _sku | 1075
53712 | 22094 | _stock | 2

Тук трябва да се направи код, който да търси IDПродуктXML в SQL базата и по-конкретно в колона meta_value.

След като IDПродуктXML е намерил реда, в който meta_value е равно на 1075 от тук трябва да се взема post_id или 22094 - IDПродуктSQL.

Следваща стъпка е да се намери реда, в който на този продукт е записано количеството:

$sql = "SELECT * FROM wp_postmeta WHERE post_id = '22094' AND meta_key = '_stock'";
if (mysqli_query($conn, $sql)) {
$result = mysqli_query($conn, $sql);
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["meta_id"]. "<br>"; // Резултат id: 53712 (meta_id)
}
} else {
echo "0 results";
}
// $conn - прави SQL връзката (само за уточнение)

Последна стъпка е да актуализират количествата:

$sqlupdate = "UPDATE wp_postmeta SET meta_value='3' WHERE meta_id = 53712"; //тук в meta_value='3' трябва да вземе стойността на QtyПродуктXML

if (mysqli_query($conn, $sqlupdate)) {
echo "Record updated successfully<br><br>";
} else {
echo "Error updating record: " . mysqli_error($conn);
}

Надявам се успях да обясня какво искам. Не знам дали съм на прав път, но ще съм благодарен на всеки, който може да помогне.
Благодаря за отделеното време.
 
Само да попитам, тази актуализация с крон ли ще се случва или при някакъв ивент? Според мен ако ще се прави плъгин трябва да има опцията кое да обновява количествата. Според мен си на правилен път, логически, с кодовете трябва повече да задълбая. Мисля, че може да се тества скрипта. ;) Евалата ти казвам човече, бека не ми е силна част, но като почнеш фронта, ако го превръщаш в плъгин, свиркай да се помага. :)
 
Благодаря, разгледах го. В инструкциите пише, че трябва да се свали UtilityCenter и да се настрои Connector WooCommerce, обаче последното го няма в настройките. Писах им и чакам отговор.
 
Благодаря, разгледах го. В инструкциите пише, че трябва да се свали UtilityCenter и да се настрои Connector WooCommerce, обаче последното го няма в настройките. Писах им и чакам отговор.
Ще ти бъде ли от ползва? Или ще го ползваш за основа към твоята разработка.
 
UtilityCenter е 500 лв. лиценза (за Woo трябва Plus пакет). Принципно идва малко advanced, с възможност поръчките от WooCommerce да отиват автоматично в Склад Pro. Такова нещо на мен не ми е нужно. Търсех някакво такова опростено решение само за количествени актуализации. Ще говоря с клиента.
 
Последно редактирано:

Back
Горе