2008-10-11 4 views
6

기존 XML 파일에 새 데이터를 삽입하려고했지만 작동하지 않습니다. 이제 PHP를 사용하여 XML 파일에 데이터 삽입 DOM

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

, 내 생각은 두 개의 파일을 만들고 있었다 :이 파일에 무엇을 표시하고, 새로운 요소를 삽입하기위한 필드를 제공하는 인덱스 페이지를, 그리고 데이터를 삽입하는 PHP 페이지 여기 내 XML 파일입니다 XML 파일에 저장합니다. 여기에 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'); 
?> 

사용자는 자신이 현재 활동의 목록을 참조 할 경우, index.php에 액세스하는 것입니다 XML 파일에 있고, 새로운 활동을 삽입 할 수있는 아래의 텍스트 필드가 있습니다. 보내기 버튼을 클릭하면 페이지는 insert.php를 호출합니다.이 코드는 DOM 트리에서 XML 파일을 열고, 루트 노드 아래에 새 노드를 삽입하고, 사용자가 있어야하는 index.php 페이지를 다시 호출하는 코드를 포함합니다 활동 목록을 볼 수 있고 다른 활동 아래서 그의 새로운 활동을 볼 수 있습니다. 그것은 작동하지 않습니다. 버튼을 클릭하여 새 항목을 제출하면 페이지가 새로 고쳐지고 아무 것도 나타나지 않습니다. XML은 이전과 동일합니다. 내가 뭘 잘못 했니? 또한, 더 나은 방법이 있는지 알고 싶습니다.

답변

8

은 기존 파일에서 복사하여 붙여 넣은 코드 블록입니까?

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

참고 : 그래서 내가 두 가지 잠재적 인 문제를 볼 경우 action놓치고을 = 형태는 단지 당신이 설명하는 동작 인, 제출하지 않고 자체를 다시로드 원인이"insert.php".

두 번째로 "sample.xml"에 대한 쓰기 권한이 있는지 확인하십시오. 당신이 실제로 아무것도 작성한다면 당신은 확인할 수 있습니다

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

문제는 바보 메신저 ... 실제로 파일 권한만큼 어리석은 일이었다. 누락 =은 오타이므로 문제는 아닙니다. 덕분에 많이 –

+0

하 그것은 일어납니다 :) – Owen

2

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

변경

$를 newText = $ xmldoc-> createTextNode ($ newAct)이 라인;

+0

완료, 그것을 지적 주셔서 감사합니다 –

2

실제로 두 곳에서 실수를 저 지르 셨습니다.

이 줄은 이어야합니다. 오타 때문에 나는 등호를 놓쳤습니다. 또한

이 라인은

그것이 작동해야 홉이 나는 코드의 문제점이 무엇인지 알고 있다고 생각 어떤 의미

+0

난 그냥 오타를 고정. 충분히 오래 걸렸어! 감사 –

1

을 만들 것, 지금 시도해야한다. 오른쪽 코드는 <?xml-stylesheet type="text/xsl" href="sample.xsl" ?> : 당신은 그렇게 쓰지한다

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

이 내가 나를 위해 작동 코드입니다.

색인.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

최종 솔루션

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'); 
?> 
관련 문제