私はこのページからいくつかのスクリプトを使用して私のwebshopに使用しようとしました。私はMySQLデータベースにXMLファイルをインポートしたいと思います。スクリプトは動作していますが、2番目の注文ラインだけがインポートされます。XMLをsimplexmlで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
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を使用してください。 https://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Chris
foreach($ xml-> OrderLines to $ order) 'を実行するとどうなりますか? –
投稿されたXMLには、 ''または ''のノードがありません。 –
Parfait