2008-10-11 16 views
6

Estaba tratando de insertar datos nuevos en un archivo XML existente, pero no está funcionando. Aquí está mi archivo xml:Insertar datos en un archivo XML con PHP DOM

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

Ahora, mi idea era hacer dos archivos: una página de índice, donde se muestra lo que hay en el archivo y proporciona un campo para la introducción de nuevos elementos, y una página php que inserte los datos en el archivo XML. Aquí está el código de 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 

y aquí está el código para 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'); 
?> 

El usuario es acceder a index.php, donde iba a ver una lista de las actividades actuales presente en el archivo XML, y un campo de texto debajo donde puede insertar nuevas actividades. Al hacer clic en el botón Enviar, la página llamaría a insert.php, que contiene un código que abre el archivo XML en un árbol DOM, inserta un nuevo nodo debajo del nodo raíz y devuelve la llamada a la página index.php, donde debe estar el usuario. capaz de ver la lista de actividades, su nueva actividad allí debajo de las demás. No está trabajando. Cuando hago clic en el botón para enviar una nueva entrada, las páginas se actualizan y aparentemente no pasa nada, el XML es el mismo que antes. ¿Qué hice mal? Además, me gustaría saber si hay una mejor manera de hacerlo.

Respuesta

8

es la copia del bloque de código y pegada de sus archivos existentes? Si es así veo dos problemas potenciales:

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

nota: se está perdiendo action="insert.php", lo que causaría la forma que acaba de cargar en sí sin la presentación, que es el comportamiento que usted describe.

En segundo lugar, asegúrese de tener permiso de escritura para "sample.xml". Puede confirmar si en realidad estás escribiendo cualquier cosa:

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

la cuestión era en realidad algo tan tonto como permisos de ficheros ... soy una tonta. el missing = es un error tipográfico, por lo que no fue un problema. muchas gracias –

+0

ha sucede :) – Owen

2

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

cambiar esta línea de

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

+0

hecho, gracias por señalar –

2

En realidad cometiste errores en dos lugares.

Esta línea debe ser creo que por el error tipográfico, se ha perdido un signo igual. También

Estas líneas deben ser

oportunidad ahora, que debería funcionar, Hop esto podría tener algún sentido

+0

acabo de arreglar el error tipográfico. me llevó lo suficiente! Gracias –

1

Creo que sé cuál es el problema con su código. No se debe escribir así: <?xml-stylesheet type="text/xsl" href="sample.xsl" ?> El código correcto es:

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

este es el código que funciona para mí.

índice.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

Solución Final

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'); 
?> 
Cuestiones relacionadas