Alles zwischen <div id...> und </div> ersetzen

Nappi

Mitglied
Hallo zusammen

Ich möchte ganz gerne mit PHP in einem HTML file den abschnitt zwischen <div.. > und </div> mit einem neuen ersetzen wenn er schon vorhanden ist - falls er noch micht vorhanden ist soll er angefügt werden.

Das habe ich bisher

PHP:
<?php

$name = $_POST['name'];
$$text = $_POST['text'];
$image = $_POST['image'];
$file = $DOCUMENT_ROOT. 'member.html';

$htmleintrag = '
				<div id="'.$name.'">
				<h3>'.$name.'</h3>
				<p><div>
				<img style="float: left; padding: 5px; margin: 5px 5px 5px 5px; border: 2px solid black" src="'.$image.'" alt="'.$name.'" width="400px" />
				</div>
				<p>'.$text.'</p>
				</div>';


$doc = new DOMDocument();
$doc->loadHTMLFile($file);

$xpath = new DOMXpath($doc);

$elements = $xpath->query("/html/body/div[@id='".$name."']");

if (!is_null($elements)) {
  foreach ($elements as $element) {

if (is_writable($file)) {
 
     if (!$handle = fopen($file, 'a')) {
          print 'Kann die Datei '.$file.' nicht öffnen';
          exit;
     }
 
     if (!fwrite($handle, $htmleintrag)) {
         print 'Kann in die Datei '.$file.' nicht schreiben';
         exit;
     }
 
     print 'Fertig, der Member '.$name.' wurde angelegt';
 
     fclose($handle);
 
 } else {
     print 'Die Datei '.$file.' ist nicht schreibbar';
 }
 
 
     $nodes = $element->childNodes;
    foreach ($nodes as $node) {
		
$htmleintrag = preg_replace ('<div id="'$name'">', '</div>' , $htmleintrag);

    }
  }
}

?>

Damit klappt das eintragen schon mal sehr gut aber leider nicht das ersetzen - wenn der Eintrag schon vorhanden ist bekomme ich die Fehlermeldung

Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: ID already defined in member.html, line: 24 in E:\xampp\htdocs\test\html.php on line 20
Fertig, der Member wurde angelegt

Das sagt mir zwar der die Abfrage funktioniert aber leider das Ersetzen nicht.

Beim anhängen wird es ganz ans ende gesetzt - sollte aber vor </body> kommen

Kann mir bitte jemand sagen was ich für einen Fehler gemacht habe

THX Nappi
 
Zuletzt bearbeitet:
Moin,

die Fehlermeldung besagt etwas anderes: in dem Dokument befinden sich bereits beim Öffnen mehrere Elemente mit identischer ID, was lt. HTML nicht legitim ist.

Auch mag ich nicht glauben, dass dein Code überhaupt etwas macht, denn er birgt Parser-Fehler in sich:
Code:
$htmleintrag = preg_replace ('<div id="'$name'">', '</div>' , $htmleintrag);


Warum etwas falsch angehangen wird, lässt sich nicht sagen, ohne zu Sehen, wie du dort versuchst, irgendwo etwas anzuhängen(ist aus dem Code momentan nicht ersichtlich).
 
Vielen Dank für eure Antworten,

Ich bin inzwischen mit meinem Latein am Ende.

Ich komm einfach nicht drauf was ich machen soll und habe echt schon sehr viel probiert.

das mit dem doppelden $ war ein copierfehler das steht so nicht in meinem script aber das macht im endefekt auch keinen Unterschied da es ja nicht funktioniert.

Wenn <div id="$name"> schon vorhanden ist dann wird es neu geschrieben, und ich bekomme die fehlermeldung das es schon da ist. Ist es nicht vorhanden kommt die fehlermeldung

Parse error: syntax error, unexpected T_VARIABLE in E:\xampp\htdocs\test\html.php

Kann mir vll jemand sagen wo ich neu ansetzen soll denn das was ich bisher gemacht habe ist rumstochern und mich mit meinen Ideen im kreis derhen. Egal wie ich es mache am ende lande ich wieder da wo ich bin.

Danke in voraus

Nappi
 
Zuletzt bearbeitet:
Zurück