2008-10-11 14 views
6

मैं मौजूदा डेटा फ़ाइल में नया डेटा डालने का प्रयास कर रहा था, लेकिन यह काम नहीं कर रहा है।PHP फ़ाइल के साथ XML फ़ाइल में डेटा डालने

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

अब, मेरा विचार दो फ़ाइलों बना रही थी: एक सूचकांक पृष्ठ है, जहाँ यह प्रदर्शित करता है फ़ाइल की और नए तत्व डालने के लिए एक क्षेत्र प्रदान करता है, और एक php पृष्ठ डेटा दर्ज हो जाएगा यहाँ मेरी 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 तक पहुँचने के लिए है, जहां वह वर्तमान गतिविधियों की एक सूची देखना होगा है एक्सएमएल फ़ाइल में मौजूद है, और नीचे एक टेक्स्ट फ़ील्ड जहां वह नई गतिविधियां डाल सकता है। भेजें बटन पर क्लिक करने पर, पृष्ठ insert.php को कॉल करेगा, जिसमें एक कोड होता है जो एक डीओएम पेड़ में एक्सएमएल फ़ाइल खोलता है, रूट नोड के नीचे एक नया नोड डाला जाता है और index.php पेज को वापस कॉल करता है, जहां उपयोगकर्ता होना चाहिए गतिविधियों की सूची देखने में सक्षम, दूसरों के तहत उनकी नई गतिविधि। यह काम नहीं कर रहा है। जब मैं एक नई प्रविष्टि सबमिट करने के लिए बटन पर क्लिक करता हूं, तो पेज रीफ्रेश होते हैं और स्पष्ट रूप से कुछ भी नहीं होता है, एक्सएमएल पहले जैसा ही होता है। मैंने गलत क्या किया? साथ ही, मैं जानना चाहता हूं कि ऐसा करने का एक बेहतर तरीका है या नहीं।

उत्तर

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

मुद्दा वास्तव में फ़ाइल अनुमति के रूप में के रूप में मूर्खतापूर्ण कुछ था ... इस तरह के एक मूर्ख im। लापता = एक टाइपो है, इसलिए यह कोई समस्या नहीं थी। बहुत बहुत धन्यवाद –

+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'); 
?> 
संबंधित मुद्दे