【发布时间】:2017-01-11 14:41:08
【问题描述】:
我尝试使用此页面中的一些脚本用于我的网上商店。我想将一个 XML 文件导入我的 MySQL 数据库。我得到了脚本工作,但只导入了第一个订单行,而不是第二个。
这是我的 XML 代码示例:
<?xml version="1.0" encoding="UTF-8"?>
<eWebBooking>
<OrderHead>
<Action>SendFromWarehouse</Action>
<OrderReference>5986-20193315</OrderReference>
<EarliestOrderDate/>
<OrderNumber>20193315</OrderNumber>
<SalesOrg>Web</SalesOrg>
<DistChannel>Parcel</DistChannel>
<InvoiceReference>Reknes</InvoiceReference>
<Orderer>
<Name>Ola Nordamann</Name>
<Telephone>22225555</Telephone>
<Email/>
<StreetName>Hackerstreet 46</StreetName>
<PostalCode>5986</PostalCode>
<Region>LEGOLAND</Region>
</Orderer>
</OrderHead>
<OrderLines>
<OrderLine>1</OrderLine>
<ArticleNo>10501</ArticleNo>
<ArticleDescription>MPOW Dunmer Earphone Blueth</ArticleDescription>
<ArticleBrand>MPOW</ArticleBrand>
<DlvDate>2016-09-09</DlvDate>
<NoOfPieces>1</NoOfPieces>
<DeliveryStore>eWeb</DeliveryStore>
<DeliveryCode>DELIVERY</DeliveryCode>
<Weight>0,2</Weight>
<Volume>70</Volume>
<ShipmentNo>73600698093661246</ShipmentNo>
<ParcelNo>373600596034663364</ParcelNo>
</OrderLines>
<OrderLines>
<OrderLine>2</OrderLine>
<ArticleNo>10528</ArticleNo>
<ArticleDescription>Mpow MBS5 Armor Bluetooth</ArticleDescription>
<ArticleBrand>MPOW</ArticleBrand>
<DlvDate>2016-09-07</DlvDate>
<NoOfPieces>1</NoOfPieces>
<DeliveryStore>eWeb</DeliveryStore>
<DeliveryCode>PICKUP</DeliveryCode>
<Weight>4</Weight>
<Volume>50</Volume>
<ShipmentNo>73600698093661246</ShipmentNo>
<ParcelNo>00373600698636066394</ParcelNo>
</OrderLines>
</eWebBooking>
我想我必须更改一些 foreach 代码?
这是我的 PHP 文件/代码的副本:
<?php
ini_set('display_errors','On');
$con2 = mysql_connect("databasehost","databaseuser","databasepass");
if (!$con2) {
die('Could not connect: ' . mysql_error());
}
$selectdb = mysql_select_db("databasename", $con2);
if (!$selectdb) {
die('Database not used: ; ' . mysql_error());
}
$file_arr = array();
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if (($file != ".") && ($file != "..")) {
if(substr($file, -4) == ".xml")
{
array_push($file_arr, $file);
}
}
}
closedir($handle);
}
foreach($file_arr as $filename)
{
$xml = simplexml_load_file($filename);
$Action = mysql_real_escape_string($xml->OrderHead->Action);
$OrderReference = mysql_real_escape_string($xml->OrderHead->OrderReference);
$EarliestOrderDate = mysql_real_escape_string($xml->OrderHead->EarliestOrderDate);
$OrderNumber = mysql_real_escape_string($xml->OrderHead->OrderNumber);
$SalesOrg = mysql_real_escape_string($xml->OrderHead->SalesOrg);
$DistChannel = mysql_real_escape_string($xml->OrderHead->DistChannel);
$InvoiceReference = mysql_real_escape_string($xml->OrderHead->InvoiceRefernce);
$Name = mysql_real_escape_string($xml->OrderHead->Orderer->Name);
$Telephone = mysql_real_escape_string($xml->OrderHead->Orderer->Telephone);
$Email = mysql_real_escape_string($xml->OrderHead->Orderer->Email);
$StreetName = mysql_real_escape_string($xml->OrderHead->Orderer->StreetName);
$PostalCode = mysql_real_escape_string($xml->OrderHead->Orderer->PostalCode);
$Region = mysql_real_escape_string($xml->OrderHead->Orderer->Region);
$OrderLine = mysql_real_escape_string($xml->OrderLines->OrderLine);
$ArticleNo = mysql_real_escape_string($xml->OrderLines->ArticleNo);
$ArticleDescription = mysql_real_escape_string($xml->OrderLines->ArticleDescription);
$ArticleBrand = mysql_real_escape_string($xml->OrderLines->ArticleBrand);
$DlvDate = mysql_real_escape_string($xml->OrderLines->DlvDate);
$NoOfPieces = mysql_real_escape_string($xml->OrderLines->NoOfPieces);
$DeliveryStore = mysql_real_escape_string($xml->OrderLines->DeliveryStore);
$DeliveryCode = mysql_real_escape_string($xml->OrderLines->DeliveryCode);
$Weight = mysql_real_escape_string($xml->OrderLines->Weight);
$Volume = mysql_real_escape_string($xml->OrderLines->Volume);
$ShipmentNo = mysql_real_escape_string($xml->OrderLines->ShipmentNo);
$ParcelNo = mysql_real_escape_string($xml->OrderLines->ParcelNo);
$TimeWindowStart = mysql_real_escape_string($xml->OrderLines->TimeWindowStart);
$TimeWindowEnd = mysql_real_escape_string($xml->OrderLines->TimeWindowEnd);
mysql_query("INSERT INTO xml (Action, OrderReference, EarliestOrderDate, OrderNumber, SalesOrg, DistChannel, InvoiceReference, Name, Telephone, Email, StreetName, PostalCode, Region, OrderLine, ArticleNo, ArticleDescription, ArticleBrand, DlvDate, NoOfPieces, DeliveryStore, DeliveryCode, Weight, Volume, ShipmentNo, ParcelNo, TimeWindowStart, TimeWindowEnd)
VALUES ('$Action', '$OrderReference', '$EarliestOrderDate', '$OrderNumber', '$SalesOrg', '$DistChannel', '$InvoiceReference', '$Name', '$Telephone', '$Email', '$StreetName', '$PostalCode', '$Region', '$OrderLine', '$ArticleNo', '$ArticleDescription', '$ArticleBrand', '$DlvDate', '$NoOfPieces', '$DeliveryStore', '$DeliveryCode', '$Weight', '$Volume', '$ShipmentNo', '$ParcelNo', '$TimeWindowStart', '$TimeWindowEnd')")
or die(mysql_error());
printf ("Records inserted: %d\n", mysql_affected_rows());
echo " <p />--- --- --- --- --- --- --- --- ---<p />";
}
mysql_close($con2);
?>
【问题讨论】:
-
请停止使用
mysql_*函数。它们在 PHP 5.5 中被弃用,它太旧了,甚至不再接收安全更新,并在 PHP 7 中完全删除。相反,使用mysqli_*或 PDO。见stackoverflow.com/questions/12859942/… -
如果你这样做
foreach ($xml->OrderLines as $order)怎么办? -
在发布的 XML 中,
<TimeWindowStart>或<TimeWindowEnd>没有节点。