XML-Datei mit fput() schreiben

Rzwoh

Grünschnabel
Hier erstmal mein code

das ist mein PHP code wo die daten übergeben werden:

PHP:
<?

$text=$_POST["text"];

$head=$_POST["head"];
$autor=$_POST["autor"];


$entry = "".$head."\r\n";
$entry = $entry."".$text."\r\n";
$entry = $entry."".$autor."\r\n";



$f = fopen("daten.xml","a+");
fputs( $f, "\r\n".$entry."\r\n" );
fclose($f);



?>


Die soll nun in die XML datei DATEN die nun so aussieht:


Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<!DOCTYPE Gruss [

  <!ELEMENT artikel (autor,text,zeit)>
	<!ELEMENT head (#PCDATA)>
	<!ELEMENT text (#PCDATA)>
	<!ELEMENT autor (#PCDATA)>
]>



aber das was auf der Variable entry steht sollte ja nun in den Tags artikel, head, text, autor stehen.


Machts aber nicht es steht einfach nur so drunter. Wo ist mein fehler und kann man das so überhaupt machen Habe in einem anderen Forum gelesen es würde gehen.
PS: habe nur PHP4 zur verfügung.
thx Rick
 
Die PHP-Version ist so ziemlich egal, da dein Quelltext ohne Fehler ist soweit ich sehe.
Um ihn besser lesbar zu machen (auch für andere) solltest du ihn zwischen die Code-Tags setzen:
[PHP]/*Quelltext*/[/PHP]
Ohne Unterstrich bei dem PHP versteht sich ;)

Dein Problem besteht meiner Meinung nach darin, dass du dich nicht ausreichend mit diesem simplen Skript beschäftigt hast. Lies dir bitte nur kurz die Beschreibung für die Funtkionen fopen(); (Öffnen), fputs(); (Schreiben), fclose(); (Schließen) und eventuell noch fread(); durch und du wirst in 5 Minuten das gewünschte Ergebnis haben.

Nur so als Info (sollte jeder aber eigentlich wissen, da dies in vielen Skript- und Programmiersprachen gleich ist):
  • Strings (Zeichenketten) werden meist zwischen zwei Anführungszeichen abgegrenzt, z.B: "\r\n" Dies ist ein einfacher String aus eigentlich ZWEI ASCII-Zeichen, welche unter Windows einmal Enter drücken im Texteditor gleichen (neue Zeile, Zeilenumbruch).
  • Der . ist (in PHP) ein Verkettungs- oder Verbindungs-Operator. Er verkettet/verbindet Strings mit Variablen, z.B: "\r\n".$entry."\r\n"
    Stell dir einfach vor du hast das Notepad aufgemacht, einmal Enter gedrückt, den Inhalt von $entry eingetippt und noch einmal Enter gedrückt.

Jetzt solltest du auch wissen, was bei fputs(); geschrieben wird.

Nun stellt sich nur noch die Frage wie man diesen String:
PHP:
<?php
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>

<!DOCTYPE Gruss [

<!ELEMENT artikel (autor,text,zeit)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
]>"
?>

der Variable $entry ZUWEISEN soll...

Mit dem gerade erworbenem Wissen (keine Ahnung wo deine Lücke war) sollte es möglich sein dein Problem zu lösen :rtfm:

PS: Ich denke dieses Skript würde selbst mit PHP 3 seine Arbeit tun :-)
 
Hallo danke erstmal für deine Ausführliche Antwort.
Aber ich glaube du hast mich etwas falsch verstanden.


Ich habe auf Meinen variablen $autor, $head usw. Strings stehen.
Außerdem habe ich eine XML Datei wo diese Strings in einer bestimmten reihenfolge gespeichert werden sollen.

Mein Problem ist jetzt das in meiner XML Datei wenn ich diese Variablen versuche mit fputs in diese XML zu schreiben versuche kommt dabei sowas raus:

PHP:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<!DOCTYPE Gruss [

  <!ELEMENT artikel (autor,text,zeit)>
	<!ELEMENT head (#PCDATA)>
	<!ELEMENT text (#PCDATA)>
	<!ELEMENT autor (#PCDATA)>

]>
Überschrift
dies ist der Text
Hansi

statt wie gewünscht:


PHP:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<!DOCTYPE Gruss [

  <!ELEMENT artikel (autor,text,zeit)>
	<!ELEMENT head (#PCDATA)>
	<!ELEMENT text (#PCDATA)>
	<!ELEMENT autor (#PCDATA)>

]>

<artikel>
<head>überschrift</head>
<text>Dies ist der Text</text>
<autor>Hansi</autor>
</artikel>

so. Woran kann das liegen aber ich bin doch auf dem richtigen Weg oder
Probiere mich jetzt shcon eine ganze weile an diesem Problem.

Danke
 
Ich denke du hast mich falsch verstanden...

Dein Quelltext:
PHP:
<?

$text=$_POST["text"]; // Der Variable $text wird der Inhalt von $_POST["text"] zugewiesen

$head=$_POST["head"];// Der Variable $head wird der Inhalt von $_POST["head"] zugewiesen

$autor=$_POST["autor"];// Der Variable $autor wird der Inhalt von $_POST["autor"] zugewiesen

$entry = "".$head."\r\n"; /* $entry wird ein Leerstring gefolgt von dem Inhalt von $head
gefolgt von einem Zeilenumbruch zugewiesen, also "Überschrift" + neue Zeile */
$entry = $entry."".$text."\r\n"; /* $entry bekommt den eigenen bisherigen Inhalt gefolgt
von einem (sinnlosen) Leerstring gefolgt von dem Inhalt der Variable $text gefolgt von
einem Zeilenumbruch zugewiesen..., also : "Überschrift
dies ist der Text" + neue Zeile*/
$entry = $entry."".$autor."\r\n"; /* $entry bekommt den eigenen bisherigen Inhalt gefolgt
von einem (sinnlosen) Leerstring gefolgt von dem Inhalt der Variable $autor gefolgt von
einem Zeilenumbruch zugewiesen..., also : "Überschrift
dies ist der Text
Hansi" + neue Zeile*/

$f = fopen("daten.xml","a+"); // Die XML.Datei wird geöffnet
fputs( $f, "\r\n".$entry."\r\n" ); /* der Inhalt von Entry, also: "Überschrift
dies ist der Text
Hansi
" wird geschrieben*/
fclose($f); // Die XML.Datei wird geschlossen

?>

Dein Problem: Du hast überhaupt keine Ahnung was da passiert sonst würde dir klar sein, dass du lediglich die fehlenden Tags einfügen musst...

Ich will mal nicht so sein, aber ich würde dir empfehlen dich etwas genauer mit der Materie auseinander zu setzen oder es bleiben zu lassen :rolleyes:

Versuch einer Erklärung:
PHP:
<?

$text=$_POST["text"]; // Der Variable $text wird der Inhalt von $_POST["text"] zugewiesen

$head=$_POST["head"];// Der Variable $head wird der Inhalt von $_POST["head"] zugewiesen

$autor=$_POST["autor"];// Der Variable $autor wird der Inhalt von $_POST["autor"] zugewiesen

//Eintrag zusammenstellen
$entry = "\r\n<artikel>";
$entry .= "<head>".$head."</head>";
$entry .= "<text>".$text."</text>";
$entry .= "<autor>".$autor."</autor>";
$entry .= "</artikel>";

//oder
$entry = "
<artikel>
<head>".$head."</head>
<text>".$text."</text>
<autor>".$autor."</autor>
</artikel>";

$f = fopen("daten.xml","a+"); // Die XML.Datei wird geöffnet
fputs( $f, "\r\n".$entry."\r\n" ); /* der Inhalt von Entry, also: "
<artikel> 
<head>überschrift</head> 
<text>Dies ist der Text</text> 
<autor>Hansi</autor> 
</artikel>" wird geschrieben*/
fclose($f); // Die XML.Datei wird geschlossen

?>

Wenn ich nun dein Formular nachbaue, es teste und in der Daten.xml bereits folgender Text steht:

Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 

<!DOCTYPE Gruss [ 

  <!ELEMENT artikel (autor,text,zeit)> 
  <!ELEMENT head (#PCDATA)> 
  <!ELEMENT text (#PCDATA)> 
  <!ELEMENT autor (#PCDATA)> 

]>

dann erhalte ich mit meiner Version des Quellcodes folgende Ausgabe:
Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 

<!DOCTYPE Gruss [ 

  <!ELEMENT artikel (autor,text,zeit)> 
  <!ELEMENT head (#PCDATA)> 
  <!ELEMENT text (#PCDATA)> 
  <!ELEMENT autor (#PCDATA)> 

]> 

<artikel> 
<head>überschrift</head> 
<text>Dies ist der Text</text> 
<autor>Hansi</autor> 
</artikel>
 
Zuletzt bearbeitet:
Hey danke nochmal...Ok das ich das natürlich aus so machen könnte, daran hab ich noch gar nicht gedacht. Dachte die ganze zeit die Tags müssten automatisch generiert werden. Ich weiß schon was passiert...ich werde mich auch noch sicher mehr damit beschäftigen.
Ich habe mich aber bei einer Firma beworben und muss eine Art Einstellungstest machen und habe nur eine woche Zeit darfür. Praktisch mach ich gerade einen Crashkurs in PHP und XML da ich davor nur erfahrung mit Jave und html hatte.

Aber trotzdem noch mal vielen dank
 
Zurück