2017-09-08 6 views
0

orders.xmlのような既存のXMLがない場合、データをXMLに保存する際に問題があります。しかし、既存のファイルがある場合は保存されます。これは、キャッチ可能な致命的なエラー:DOMDocument :: saveXML()に渡される引数1は、DOMNodeの文字列でなければなりません。

Catchable fatal error: Argument 1 passed to DOMDocument::saveXML() must be an instance of DOMNode, string given in C:\xampp\htdocs\CWP413\MidtermExam\buy.php on line 75"...

最初の行は別のフォームから製品を購入したときのフォームのロード用です。ここで

は私のコードです:

// script by candy21 
$products =simplexml_load_file("product.xml") or die("ERROR"); 

foreach ($products->product as $product){ 
     if($product['id']==$_GET['id']){ 
      $id = $product['id']; 
      $name =$product->name; 
      $price = $product->price; 
      break; 
     } 

    } 


if(isset($_POST['submitSave'])){ 
    $quan = $_POST['quan']; 

    $total = $price * $quan; 

    $xml = new DOMDocument("1.0","UTF-8"); 
    $xml -> preserveWhiteSpace = TRUE; 
    $xml -> formatOutput = true; 

    if(file_exists("orders.xml")){ 
     $xml = simplexml_load_file('orders.xml'); 
     $order = $xml->addChild('order'); 
     $order->addChild('id', $id); 
     $order->addChild('name', $name); 
     $order->addChild('price', $price); 
     $order->addChild('quan', $quan); 
     $order->addChild('total', $total); 

     //echo "<xmp>" .$xml -> saveXML(). "</xmp>"; 
     $xml->saveXML("orders.xml"); 
     $xml=simplexml_load_file("orders.xml") or die("ERROR"); 
     $a=1; 
     foreach($xml->children() as $order) 
     { 
     echo"<div class = 'orderlist' "; 
     echo"<b>Order No.:". $a++."</b><br>"; 
     echo"Product Id: ".$order->id."<br>"; 
     echo"Product Name: ".$order->name."<br>"; 
     echo"Price: ".$order->price."<br>"; 
     echo"Quantity Ordered: ".$order->quan."<br>"; 
     echo"Total Price: ".$order->total."<br>"; 
     echo"</div><br>"; 
     } 

    } 
    else{ 
     $orders = $xml -> createElement("orders"); 
     $xml -> appendChild($orders); 

     $order = $xml -> createElement("order"); 
     $orders -> appendChild($order); 

     $id = $xml -> createElement("id", $id); 
     $order -> appendChild($id); 



     $name = $xml -> createElement("name", $name); 
     $order -> appendChild($name); 

     $price = $xml -> createElement("price", $price); 
     $order -> appendChild($price); 

     $quan = $xml -> createElement("quan", $quan); 
     $order -> appendChild($quan); 

     $total = $xml -> createElement("total", $total); 
     $order -> appendChild($total); 

     $xml->saveXML("orders.xml"); 
     $xml->saveXML($order->item(0)); 

     $xml=simplexml_load_file("orders.xml") or die("ERROR"); 
     $a=1; 
     foreach($xml->children() as $order) 
     { 
     echo"<div class = 'orderlist' "; 
     echo"<b>Order No.:".$a++."</b><br>"; 
     echo"Product Id: ".$order->id."<br>"; 
     echo"Product Name: ".$order->name."<br>"; 
     echo"Price: ".$order->price."<br>"; 
     echo"Quantity Ordered: ".$order->quan."<br>"; 
     echo"Total Price: ".$order->total."<br>"; 
     echo"</div><br>"; 
     } 
    } 

答えて

0

DOMDocument::saveXML()は、filename引数を取りません。結果を文字列として返します。ファイルに書き込む必要があります。だから、変更:

$xml->saveXML("orders.xml"); 

へ:

file_put_contents("orders.xml", $xml->saveXML()); 
+0

それとも、 '$ XML->( "orders.xml")を保存' –

+0

はありがとうございました。できます :) – Candy083

関連する問題