php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 6 Stimmen, 5,00 durchschnittlich.
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 13-06-2010, 09:39
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Question Mit PHP -> html teilweise ersetzen

Hallo zusammen

Gibt es eine Möglichkeit nur einen Teil in einem mit PHP erstellten HTML File zu ersetzen wenn dieser Eintrag geändert wurde, ihn jedoch anhängen wenn er noch nicht vorhanden ist?
Das mit dem Anhängen klappt ja ganz problemlos damit

PHP-Code:
<?php
 
// Sichergehen, dass die Datei existiert und beschreibbar ist
if (is_writable($filename)) {
 
     
// Wir öffnen $filename im "Anhänge" - Modus.
     // Der Dateizeiger befindet sich am Ende der Datei, und
     // dort wird $somecontent später mit fwrite() geschrieben.
     
if (!$handle fopen($filename"a")) {
          print 
"Kann die Datei $filename nicht öffnen";
          exit;
     }
 
     
// Schreibe $somecontent in die geöffnete Datei.
     
if (!fwrite($handle$somecontent)) {
         print 
"Kann in die Datei $filename nicht schreiben";
         exit;
     }
 
     print 
"Fertig, in Datei $filename wurde $somecontent geschrieben";
 
     
fclose($handle);
 
 } else {
     print 
"Die Datei $filename ist nicht schreibbar";
 }
 
?>
Nun sollte aber abgefragt werden ob im HTML <div id="Pferd"> schon vorhanden ist - wenn ja soll dieser Eintrag durch den neuen ersetzt werden wenn nicht soll er angehangen werden.

Danke für eure Hilfe

Nappi
Mit Zitat antworten
  #2 (permalink)  
Alt 13-06-2010, 10:34
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

für solche Dinge kann ich nur dazu raten, das DOM zu benutzen und speziell für die Prüfung, ob etwas enthalten ist oder nicht, gibt es XPath.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 13-06-2010, 10:48
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielen dank

xPath war genau das was ich gesucht habe

danke nochmal

Nappi
Mit Zitat antworten
  #4 (permalink)  
Alt 14-06-2010, 12:19
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das mit xpath ist zwar eine sehr gute Idee nur bin ich anscheinend nicht gut genug um es richtig ein zu setzen!

Ich habe es so versucht

PHP-Code:
<?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('*/div[@id="'.$name.'"]');

if (!
is_null($elements)) {
  foreach (
$elements as $element) {
PHP-Code:
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);
 
    }
  }
}
?> 
Was passiert - > wenn das DIV vorhanden ist wird es neu geschriben das alte aber nicht überschrieben, wenn ich jetzt das ganze noch zwei weitere male machte kommt diese Fehlermeldung.

Zitat:
Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: htmlParseStartTag: invalid element name in member.html, line: 45 in E:\xampp\htdocs\test\html.php on line 19

Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: Unexpected end tag : div in member.html, line: 51 in E:\xampp\htdocs\test\html.php on line 19
Ist das DIV noch nirgens im HTML file vorhanden macht das Script garnichts.

Wo liegt mein Fehler?

Danke für Eure Hilfe

Nappi

Geändert von Nappi (14-06-2010 um 13:13 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 14-06-2010, 12:23
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

member.html enthält offenbar kaputte HTML-Code. Korrigiere diesen mit Hilfe von dem W3C-Validator.
Mit Zitat antworten
  #6 (permalink)  
Alt 14-06-2010, 12:39
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Bevor du loadHTMLFile aufrufst, solltest du
PHP-Code:
libxml_use_internal_errors(true); 
setzen, damit die Fehlermeldungen nicht direkt ausgegeben werden.

Die ganze preg_replace- und fwrite-Geschichte ist schlecht. Du solltest stattdessen direkt das DOM bearbeiten:

PHP-Code:
$found false;
foreach (
$xpath->query('//div[@id="'.$name.'"]') as $node) {
    
$found true;
    
// ersetzen:
    
$node->parentNode->replaceChild($neuesElement$node);
    break;
}
if (!
$found) {
    
// einfügen:
    
$irgendeinElternElement->appendChild($neuesElement);
}
// speichern
$doc->save($file); // oder $doc->saveHTMLFile($file); 
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 14-06-2010, 13:00
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen dan für Eure Antworten

Ich habe das vorerst so übernommen und Arbeite mich da rein so das ich es auch wirklich verstehe

Es kommt diese Fehlermeldung

Zitat:
Fatal error: Call to a member function appendChild() on a non-object in E:\xampp\htdocs\test\html.php on line 33
Line 33 ist

Code:
$doc->save($file); // oder $doc->saveHTMLFile($file);
auch wenn ich

Code:
$doc->saveHTMLFile($file);
verwende kommt die selbe Fehlermeldung
warum kann er nicht speichern?

Nappi

Geändert von Nappi (14-06-2010 um 13:02 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 14-06-2010, 13:03
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Was steht denn auf Zeile 33? Hast du „$irgendeinElternElement“ auch durch was sinnvolles ersetzt?

Edit zu deinem Edit: Nein, Zeile 33 ist die, auf der appendChild aufgerufen wird, nur rufst du es von etwas falschem auf.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (14-06-2010 um 13:05 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 14-06-2010, 13:07
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du bist zu schnell für mich

Ich habe meinen vorherigen Post nochmal geendert weil ich vergessen hatte zu schreiben was in line 33 steht - da hattest du schon geantwortet.

Echt klasse

Ja ich verwende Statische werte für die Variablen zum testen

PHP-Code:
$name 'Nappi';
$text 'mal testen ob das geht';
$image 'img1.png';
$file $DOCUMENT_ROOT'member.html'
Nappi
Mit Zitat antworten
  #10 (permalink)  
Alt 14-06-2010, 13:12
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

jetzt verstehe ich das erst! bzw nicht :/


$irgendeinElternElement wäre bie mir ja $htmleintrag oder ist das falsch?

Ich stehe total am schlauch und finde keinen weg runter

Nappi
Mit Zitat antworten
  #11 (permalink)  
Alt 14-06-2010, 13:24
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich kann aus deinem Code leider nicht rekonstruieren, was genau du eigentlich vorhast. Wenn ich mich nicht irre, gehst du ziemlich falsch an die Sache ran und hast in Sachen XML generell noch Nachholbedarf. Daher weiß ich nicht, wo ich anfangen soll, dir zu erklären, dass du das alles wegwerfen kannst, um nochmal sauber anzufangen.

Als erstes beschreibst du jetzt bitte, was für ein Dokument das ist, wo diese Einträge rein sollen und an welcher Stelle nicht vorhandene eingefügt werden sollen. So wie du es mit fwrite machen willst, geht es einfach nicht, denn dann kommt z. B. sowas raus und das ist kein gültiges HTML:

HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title>...</title>
	</head>
	<body>
		...
	</body>
</html>
<div ...>...</div>
<div ...>...</div>
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 14-06-2010, 13:44
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du hast absolt recht mit xml kenn ich mich wirklich sehr schlecht aus.

Also ich verwende eine ein HTML file so zu ändern das wenn ein Neues Bild mit beschreibung geladen wird dieses in das HTML file eingetragen wird. Ist es aber schon einmal vorhanden und soll lediglich erneuert werden bzw eine neue Beschreibung eingefügt werden dann soll die Alte überschrieben werden.

das ist das HTML

HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Galerie</title>
</head>
<body>

<div id="horse1">
	<h3>Pferd im Galopp</h3><p><div >
	<img style="float: left; padding: 5px; margin: 5px 5px 5px 5px; border: 2px solid black"
	src="/images/horse1.jpg"
	alt="Pferd im Galopp" width="400px" /></div>
	<p>Beschreibung des Bildes.</p>
</div>

</body>
</html>
Die zwei äusseren DIV geben dan zu ändernden Rahmen.

Das ganze ist für eine Galerie.

Ich hoffe du kannst mir helfen denn bei allem probieren und lesen - suchen nach Tuorials und Manuels habe ich komplet den überblick verlohren.

Nappi
Mit Zitat antworten
  #13 (permalink)  
Alt 14-06-2010, 14:22
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

In diesem Fall ist $irgendeinElternElement also das body-Element und das erhältst du so (kannst es dann gerne auch überall(!) in $body umbenennen):

PHP-Code:
$irgendeinElternElement null;
foreach (
$xpath->query("/html/body") as $node) {
    
$irgendeinElternElement $node;
    break;

__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #14 (permalink)  
Alt 14-06-2010, 14:49
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Irgendwie klappt das leider auch nicht :/

Sorry das ich dir so viel mühe mache.

Ich bekomme da die Fehlermeldung

Zitat:
Fatal error: Call to a member function appendChild() on a non-object in E:\xampp\htdocs\test\html.php
Und ich glaube das es im weiteren verlauf mit body nicht gehen wird da ja mehrere DIV ID in der HTML stehen werden und dann ersetzt er mir ja immer alle - oder liege ich da schon wieder falsch.

Nochmals sorry - ich bin eben ziemlich blond

Selma
Mit Zitat antworten
  #15 (permalink)  
Alt 14-06-2010, 19:49
Nappi
 Registrierter Benutzer
Links : Onlinestatus : Nappi ist offline
Registriert seit: Apr 2004
Beiträge: 14
Nappi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab eine Positives resuldat - auch wenn es noch immer nicht das ist was es sein sollte aber zumindest tut sich etwas

Mein Momentanes Script - oder besser das von AmicaNoctis

PHP-Code:
<?php
$name 
$_POST['name'];
$text $_POST['text'];
$image $_POST['image'];
$file $DOCUMENT_ROOT'member.html';
$neuesElement '
                <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>'
;

libxml_use_internal_errors(false); 
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$found false;
foreach (
$xpath->query('/body/div[@id="'.$name.'"]') as $node) {
    
$found true;
    
// ersetzen:
    
$node->parentNode->replaceChild($neuesElement$node);
    break;
}
if (!
$found) {
    
$bodyElement null;
foreach (
$xpath->query("/body") as $node) {
    
$bodyElement $node;
    
// einfügen:
    
$bodyElement->appendChild($neuesElement);
    break;
} }

// speichern
$doc->save($file); // oder $doc->saveHTMLFile($file);  
?>
Dabei kommt das raus

HTML-Code:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<?xml version="1.0" standalone="yes"?>
<html><body>&#xD;
&#xD;
<div id="horse">&#xD;
	<h3>Pferd im Galopp</h3><p/><div>&#xD;
	<img style="float: left; padding: 5px; margin: 5px 5px 5px 5px; border: 2px solid black" src="/images/horse1.jpg" alt="Pferd im Galopp" width="400px"/></div>&#xD;
	<p>Beschreibung des Bildes.</p>&#xD;
</div>&#xD;
&#xD;
</body></html>
leider übernimmt es mir nicht mein HTML und die komischen zeichen - &#xD; - ka wo die her kommen.

Da ist noch etwas - bei jedem erneuten aufruf kommt ein ? und eine Zeile bei

Zitat:
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" standalone="yes"??>
<?xml version="1.0" standalone="yes"???>
hinzu, nach 3 aufrufen sieht es so aus wie oben.

Wo liegt jetzt noch der Fehler?

Nappi

Geändert von Nappi (14-06-2010 um 19:55 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/99714-mit-php-html-teilweise-ersetzen.html
Erstellt von For Type Datum
Mit PHP html teilweise ersetzen - XHTMLforum This thread Refback 25-07-2012 15:13

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML 5 soll angeblich Flash ersetzen? Truncate Off-Topic Diskussionen 11 01-02-2010 21:25
HTML ersetzen koschda PHP Developer Forum 13 21-03-2005 10:35
text in html ersetzen 3-yl BRAINSTORMING PHP/SQL/HTML/JS/CSS 30 18-03-2004 18:27
Teilweise vergleichen matz0r1 SQL / Datenbanken 5 18-11-2003 10:35
Suchfunktion nur teilweise OK Timelesk Fragen/Vorschläge zum Forum 4 01-07-2003 09:41

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:14 Uhr.