@kolomat

Почему simpleXML неправильно обрабатывает данные?

Добрый день, возможно кто-то сталкивался с подобной проблемой.
Предистория такая, 1с по ftp выгружает xml файл. Изначально стуктура данного файла была таковой
<export>
<counterpart>
<Articul>624005066</Articul>
<kolichestvo>-1</kolichestvo>
<Zena>1 350</Zena>
</counterpart>
<counterpart>
<Articul>624005102</Articul>
<kolichestvo>-2</kolichestvo>
<Zena>2 350</Zena>
</counterpart>
<counterpart>
<Articul>624031744</Articul>
<kolichestvo>5</kolichestvo>
<Zena>1 350</Zena>
</counterpart>
</export>

Но отрицательные значения и цена с пробелом не подходили, поэтому программист 1с сделал замены -1 на 998 и -2 на 999 и соотвественно убрал пробел в цене.
Структура стала такой
<export>
<counterpart>
<Articul>624005066</Articul>
<kolichestvo>998</kolichestvo>
<Zena>1350</Zena>
</counterpart>
<counterpart>
<Articul>624005102</Articul>
<kolichestvo>999</kolichestvo>
<Zena>2350</Zena>
</counterpart>
<counterpart>
<Articul>624031744</Articul>
<kolichestvo>5</kolichestvo>
<Zena>1350</Zena>
</counterpart>
</export>

Был написан простой скрипт такого плана
$xmlProducts = simplexml_load_file('minimen.xml');
		$pdo = new PDO("mysql:host=localhost;port=3306;dbname=test;","test","test");
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
		foreach($xmlProducts->counterpart as $product)
		{
			
		if($product->kolichestvo == '998' || $product->kolichestvo == '999')
			{
				$quantity = 0;
			}else{
				$quantity = $product->kolichestvo;
			}
		
			$sql_update = $pdo->prepare("UPDATE products SET quantity = :quantity, price = :price WHERE product_id = :product_id");
			 $sql_update->execute(
			 array(
			 ':product_id' => $product->Articul,
			 ':quantity'   => $quantity,
			 ':price'      => $product->Zena
			 ));

Так вот собственно в чем суть проблемы. При распечатке $product все нормально
object(SimpleXMLElement)#5 (4) {
  ["Articul"]=>
  string(9) "624031434"
  ["kolichestvo"]=>
  string(3) "999"
  ["Zena"]=>
  object(SimpleXMLElement)#6 (0) {
  }
}
object(SimpleXMLElement)#6 (4) {
  ["Articul"]=>
  string(9) "624031744"
  ["kolichestvo"]=>
  string(1) "5"
  ["Zena"]=>
  string(4) "1350"
}

Как мы видим и количество и цена вроде бы все нормально и при обращении к скрипту все пишется корректно и проблем нет.
Но если поставить скрипт на крон, то в бд всеравно пишеться количество -1 и -2 и цена идет с пробелом такого плана 1 350.
В чем может быть проблема? Заранее благодарен за любое мнение и совет
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
ematveev
@ematveev
PHP разработчик / руководитель / писатель
Делайте эти преобразования при загрузке информации из исходного файла! Если компьютер может сделать операцию автоматически, не должен быть задействован человек
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы