2008-10-11 57 views
6

Tôi đã cố chèn dữ liệu mới vào một tệp XML hiện có, nhưng nó không hoạt động. Dưới đây là tập tin của tôi xml:Chèn dữ liệu vào tệp XML bằng PHP DOM

<list> 
    <activity>swimming</activity> 
    <activity>running</activity> 
<list> 

Bây giờ, ý tưởng của tôi đã làm hai tập tin: một trang index, nơi mà nó sẽ hiển thị những gì trên các tập tin và cung cấp một lĩnh vực để chèn các yếu tố mới, và một trang php mà sẽ chèn dữ liệu vào tệp XML. Dưới đây là đoạn code cho index.php:

<html> 
<head><title>test</title></head> 
</head> 

<?php 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS); 

    $activities = = $xmldoc->firstChild->firstChild; 
    if($activities!=null){ 
     while(activities!=null){ 
      echo $activities->textContent.'<br/>'; 
      activities = activities->nextSibling. 
     } 
    } 
?> 

<form name='input' action='insert.php' method='post'> 
    insert activity: 
    <input type='text' name='activity'/> 
    <input type='submit' value='send'/> 
</form> 
</body> 
</html 

và đây là mã cho insert.php:

<?php 
    header('Location:index.php'); 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 

    $newAct = $_POST['activity']; 

    $root = $xmldoc->firstChild; 

    $newElement = $xmldoc->createElement('activity'); 
    $root->appendChild($newElement); 
    $newText = $xmldoc->createTextNode($newAct); 
    $newElement->appendChild($newText); 

    $xmldoc->save('sample.xml'); 
?> 

Người dùng là để truy cập vào index.php, nơi ông sẽ thấy một danh sách các hoạt động hiện tại có mặt trong tệp XML và một trường văn bản bên dưới, nơi anh ấy có thể chèn các hoạt động mới. Khi nhấp vào nút gửi, trang sẽ gọi insert.php, chứa mã mở tệp XML trong cây DOM, chèn nút mới dưới nút gốc và gọi lại trang index.php, nơi người dùng phải có thể xem danh sách các hoạt động, hoạt động mới của anh ấy ở dưới các hoạt động khác. Nó không làm việc. Khi tôi bấm vào nút để gửi một mục mới, các trang làm mới và dường như không có gì xảy ra, XML cũng giống như trước đây. tôi đã làm gì sai? Ngoài ra, tôi muốn biết nếu có một cách tốt hơn để làm điều đó.

Trả lời

8

là bản sao khối mã của bạn và được dán từ các tệp hiện có? nếu có thì tôi thấy hai vấn đề tiềm năng:

<form name='input' action'insert.php' method='post'> // should be: 
<form name="input" action="insert.php" method="post"> 

lưu ý: bạn đang bỏ lỡ action="insert.php", mà có thể gây ra các hình thức để chỉ cần tải lại bản thân mà không gửi, đó là hành vi mà bạn mô tả.

thứ hai, hãy đảm bảo bạn có quyền ghi vào "sample.xml". bạn có thể xác nhận nếu bạn đang thực sự viết bất cứ điều gì:

print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data'; 
+0

vấn đề này thực sự là một cái gì đó như ngớ ngẩn như cho phép tập tin ... im như một kẻ ngốc. thiếu = là một lỗi đánh máy, do đó, đó không phải là một vấn đề. cảm ơn rất nhiều –

+0

ha nó xảy ra :) – Owen

2

$ newText = $ xmldoc-> createTextNode ($ newActv);

Thay đổi dòng này thành

$ newText = $ xmldoc-> createTextNode ($ newAct);

+0

thực hiện, cảm ơn đã chỉ nó ra –

2

Thực ra bạn đã phạm sai lầm ở hai nơi.

Dòng này phải là Tôi nghĩ vì lỗi đánh máy, bạn đã bỏ lỡ một dấu bằng. Cũng

Những dòng này nên

Thử ngay, cần làm việc, Hop điều này sẽ làm cho một số cảm giác

+0

tôi vừa sửa lỗi đánh máy. đưa tôi đủ lâu! cảm ơn –

1

Tôi nghĩ rằng tôi biết vấn đề với mã của bạn là gì. Bạn không nên viết như thế: <?xml-stylesheet type="text/xsl" href="sample.xsl" ?> Mã bản quyền là:

<?xml:stylesheet type="text/xsl" href="sample.xsl" ?> 
1

này là mã tôi làm việc cho tôi.

chỉ mục.php

<html> 
<head><title>test</title></head> 
</head> 

<?php 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS); 

    $activities = $xmldoc->firstChild->firstChild; 
    if($activities!=null){ 
     while($activities!=null){ 
      echo $activities->textContent.'<br/>'; 
      $activities = $activities->nextSibling; 
     } 
    } 
?> 

<form name='input' action='insert.php' method='post'> 
    insert activity: 
    <input type='text' name='activity'/> 
    <input type='submit' value='send'/> 
</form> 
</body> 
</html> 




insert.php 


<?php 
    header('Location:index.php'); 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 

    $newAct = $_POST['activity']; 

    $root = $xmldoc->firstChild; 

    $newElement = $xmldoc->createElement('activity'); 
    $root->appendChild($newElement); 
    $newText = $xmldoc->createTextNode($newAct); 
    $newElement->appendChild($newText); 

    $xmldoc->save('sample.xml'); 
?> 

sample.xml

<list> 
    <activity>swimming</activity> 
    <activity>running</activity> 
</list> 
3

Giải pháp cuối cùng

sample.XML

<list> 
    <activity>swimming</activity> 
    <activity>running</activity> 
    <activity>Jogging</activity> 
    <activity>Theatre</activity> 
    <activity>Programming</activity> 
</list> 

index.php

<html> 
<head><title>test</title></head> 
</head> 

<?php 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load("sample.xml", LIBXML_NOBLANKS); 

    $activities = $xmldoc->firstChild->firstChild; 
    if($activities!=null){ 
     while($activities!=null){ 
      echo $activities->textContent."<br/>"; 
      $activities = $activities->nextSibling; 
     } 
    } 
?> 

<form name="input" action="insert.php" method="post"> 
    insert activity: 
    <input type="text" name="activity"/> 
    <input type="submit" value="send"/> 
</form> 
</body> 
</html> 

insert.php

<?php 
    header('Location:index.php'); 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 

    $newAct = $_POST['activity']; 

    $root = $xmldoc->firstChild; 

    $newElement = $xmldoc->createElement('activity'); 
    $root->appendChild($newElement); 
    $newText = $xmldoc->createTextNode($newAct); 
    $newElement->appendChild($newText); 

    $xmldoc->save('sample.xml'); 
?> 
Các vấn đề liên quan