fwrite: Eintrag hinzufügen, nicht ersetzen

Fabian Frank

Erfahrenes Mitglied
Hallo Leude,

hab ein Problem. Und zwar brauch ich ein News-Script.

Ich hab auch eins, das folgenden Quellcode hat (Betreff und Inhalt werden durch Formular in anderer Datei übergeben..is unwichtig):

news_eintrag.php
<?php

$inhalt = $_POST['inhalt'];
$betreff = $_POST['betreff'];
$user_vorname = $_SESSION['user_vorname'];
$user_nachname = $_SESSION['user_nachname'];
$filename = 'news.htm';
$news_eintrag = "<div align='center'><table border='0' cellspacing='1' width='395px' bgcolor='#0072BC' class='text'>
<tr bgcolor='#0072BC' height='20'><td>&nbsp; <font color='#ffffff'>&nbsp; <b>$betreff</b> von $user_vorname</font></td></tr>
<tr><td bgcolor='#ffffff'>
<div align='center'>
<br>
$inhalt
<br>
</div>
</td></tr>
</table><br><br></div>";

if (is_writable($filename)) {

if (!$handle = fopen($filename, "r+")) {
print "News.htm kann nicht geöffnet werden.";
exit;
}

if (!fwrite($handle, $news_eintrag)) {
print "Die Datei news.htm is nicht schreibbar!";
exit;
}

header ("Location: intern.php");

fclose($handle);

} else {
print "Die Datei news.htm existiert nicht! Bitte an Mathias oder Fabian wenden .";
}
?>

Also folgende Probleme:

1. fügt er bei dem $user_vorname den Vornamen nicht ein
und
2. Wenn ich einen neuen Eintrag verfasse, ersetzt er den neuen mit dem alten und es wird nur der neue angezeigt...

Danke für jegliche Art von Hilfe!

Greetz,

Fai

Achja: Ich hab die Suche benutzt, nichts gefunden...Lass mich gerne eines besseren belehren, hab aber gründlich gesucht.
 
ok, danke erstmal ;-)

Das hilft mir schon weiter. Jedoch werden jetzt die neuesten News unten angezeigt. Kann man das ganze dann von hinten auslesen, oder gibts da ne andere Möglichkeit?
 
Hmm, nein, einfacher gehts net wirklich.

PHP:
$file = 'test.txt';
$cont = file($file);
$content = array_reverse($cont);

print_r($content);

Und schon fertig...
 
alles klar.
Danke dir.

Aber der Code ist ja der Code für die Ausgabe. Muss ich dann nicht beim einfügen schon nen array mit einbauen ?

Ich probiers jetzt schnell ohne, wennst nicht geht, meld ich mich nochmal...

EDIT: hm, ich glaub ich bau den falsch ein. Oder muss man doch noch beim schreiben in die Datei news.htm einen array mit einfügen=?
 
Zuletzt bearbeitet:
hm...

Ok, wenns mit "a" dran gehängt wird, geh ich jetzt einfach mal davon aus, dass das auch bei "a+" der Fall ist.

Aber ich bekomm da bei der ausgabe in der datei nur so Wirres aus Zahlen und Folge-Pfeilen...

Hier mal der Code, der sich in der Datei befindet, in der die News angezeigt werden:

PHP:
<?
      $file = 'news.htm';
      $cont = file($file);
      $content = array_reverse($cont);

      print_r($content); 
?>
 
[phpf]print_r[/phpf] sollte natürlich nur zum Testen verwendet werden ;)

Allerdings empfehle ich dir, nicht den HTML Code in der Seite zu speichern, sondern eher so zu verfahren:

PHP:
<?php
$inhalt = 'TEST NEWS HALLO WIE GEHT ES EUCH <br/> TEST TESTME <br/>';
$betreff = 'Test';
$user_vorname = 'Hans';
$user_nachname = 'Mustermann';
$filename = 'news.htm';
$news_eintrag = $user_vorname."::".$user_nachname."::".$betreff."::".$inhalt;

if (is_writable($filename)) {

if (!$handle = fopen($filename, "a")) {
print "News.htm kann nicht geöffnet werden.";
exit;
}

if (!fwrite($handle, $news_eintrag)) {
print "Die Datei news.htm is nicht schreibbar!";
exit;
}

#header ("Location: intern.php");

fclose($handle);

} else {
print "Die Datei news.htm existiert nicht! Bitte an Mathias oder Fabian wenden .";
}
?>

Und zum Auslesen dann so:
PHP:
<?php
      $file = 'news.htm';
      $cont = file($file);
      $content = array_reverse($cont); 
      
foreach($content as $value) {
$content = explode("::", $value);
echo "
<div align='center'><table border='0' cellspacing='1' width='395px' bgcolor='#0072BC' class='text'>
<tr bgcolor='#0072BC' height='20'><td>&nbsp; <font color='#ffffff'>&nbsp; <b></b> von ".$content[0]."</font></td></tr>
<tr><td bgcolor='#ffffff'>
<div align='center'>
<br>
".$content[2]."
<br>
</div>
</td></tr>
</table><br><br></div>
";
}
?>

Dadurch kannst du auch das "Template" ändern ohne die gesamte "Datenbank" des Skriptes zu verändern.
 
Zurück