Daniela: Daten aus *.txt Anzeigen

Ich habe ein Newsscript das aus drei Dateien besteht erstens die Datei datenbank.txt, zweitens die news.php und index.php .
Die News einzutragen Funzt einwandfrei bis auf das ein neuer Eintrag als letztes angezeigt wird.
Kann man etwas machen das die Einträge mit dem neusten beginnend angezeigt werden ?

Und hier der Quelltext

Quelltext Datei news.php :

<head>
<title>news</title>
<style type="text/css">
<!--
a{text-decoration:none; COLOR: #FFFFFF; font-family: "Verdana"; font-size: 7pt;}
td.date {
BORDER-BOTTOM: #6F6F6F 1px solid; BORDER-LEFT: #6F6F6F 1px solid; BORDER-RIGHT: #6F6F6F 1px solid; BORDER-TOP: #6F6F6F 1px solid; COLOR: #FFFFFF; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
}
td.caption {
BORDER-BOTTOM: #C0C0C0 1px solid; BORDER-LEFT: #C0C0C0 1px solid; BORDER-RIGHT: #C0C0C0 1px solid; BORDER-TOP: #C0C0C0 1px solid; COLOR: #9F0000; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
}
td.rank {
BORDER-BOTTOM: #C0C0C0 1px solid; BORDER-LEFT: #C0C0C0 1px solid; BORDER-RIGHT: #C0C0C0 1px solid; background-color: #000000; BORDER-TOP: #C0C0C0 1px solid; COLOR: #00FF00; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
}
td.space {
COLOR: #9F0000; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 9pt;
}
body { cursor='crosshair'}
-->                                                <img src="grafic/dskhppsp_5x1.jpg" width="553" height="74" border="0" alt="">
</style>
</head>

<table width="471">

<!-- One News Entry -->
 <tr>
 <td class="rank">
.:]- [HoE] Hell on Earth News -[:.
 </td>
 </tr>
</table>

<body bgcolor="000000">
<script language="Javascript1.2">
iens6=document.all||document.getElementById
ns4=document.layers
var speed=10
if (iens6){
document.write('<div id="container" style="position:relative;width:471;height:161;border:0px solid black;overflow:hidden">')
document.write('<div align="center" id="content" style="position:absolute;width:471;center:yes;top:0">')
}
</script>
<ilayer name="nscontainer" width="471" height=161 clip="0,0,175,160">
<layer name="nscontent" width="471" height=161 visibility=hidden>
<!--INSERT CONTENT HERE-->
<body bgcolor="000000">

<script language="Javascript1.2">
if (document.all||document.getElementById)
document.body.style.background="url('grafic/dskhppsp_2x1.jpg') white center repeat fixed"
</script>

<script language="Javascript1.2">
if (document.all||document.getElementById)
document.body.style.background="url('grafic/dskhppsp_2x1.jpg') white center repeat fixed"
</script>

<!-- Begin Table -->
<table width="471">
<?php
$dn="datenbank.txt";
$dz=fopen($dn, "r");
$zeile=1;
while (!feof($dz)) {
$ausgabe=fgets($dz,80);
echo "<b>" .$ausgabe . "<br>";
$zeile+=1;
}
fclose($dz);
?>
</table>
<!-- End Table -->
<!--END CONTENT-->
</layer>
</ilayer>
<script language="Javascript1.2">
if (iens6)
document.write('</div></div>')
</script>
<table width="471"><td><p align="center">
<a href="#" onMouseover="moveup()" onMouseout="clearTimeout(moveupvar)"><img src="grafic/up.gif" border=0></a>  <a href="#" onMouseover="movedown()" onMouseout="clearTimeout(movedownvar)"><img src="grafic/down.gif" border=0></a></p></td>
<script language="Javascript1.2">
if (iens6){
var crossobj=document.getElementById? document.getElementById("content") : document.all.content
var contentheight=crossobj.offsetHeight
}
else if (ns4){
var crossobj=document.nscontainer.document.nscontent
var contentheight=crossobj.clip.height
}

function movedown(){
if (iens6&&parseInt(crossobj.style.top)>=(contentheight*(-1)+100))
crossobj.style.top=parseInt(crossobj.style.top)-speed
else if (ns4&&crossobj.top>=(contentheight*(-1)+100))
crossobj.top-=speed
movedownvar=setTimeout("movedown()",100)
}

function moveup(){
if (iens6&&parseInt(crossobj.style.top)<=0)
crossobj.style.top=parseInt(crossobj.style.top)+speed
else if (ns4&&crossobj.top<=0)
crossobj.top+=speed
moveupvar=setTimeout("moveup()",100)

}

function getcontent_height(){
if (iens6)
contentheight=crossobj.offsetHeight
else if (ns4)
document.nscontainer.document.nscontent.visibility="show"
}
window.onload=getcontent_height
</script>
    <table width="471">

<!-- One News Entry -->
 <tr>
 <td class="rank">
 </td>
 </tr>
</table>
</body>

Quelltext der index.php :

<HTML>
<HEAD>
<TITLE>News Administration</TITLE>
</HEAD>
<BODY>
<h2>Neue News eintragen</h2>
<form action=""datenbank.php?speichern=1" method="post">
<b>Datum:</b>
<input type="text" name="date" size=15><br>
<b>Text:</b>(HTML Erlaubt; KEIN Enter Tag nur für Absätze benutzen! Zeilenumbruch ist automatisch)<br>
<textarea name="text" cols="80" rows="4"></textarea><br>
<input type="submit" value="Speichern" name="speichern">
<input type="reset" value="Leeren" name="leeren">
</form>
<?php
if ($speichern) {
$dn="datenbank.txt";
$dz=fopen($dn,"a");
fputs($dz, "<tr><td class=caption>news - $date </td></tr><tr><td class=date>$text</td></tr>" . chr(13) . chr(10));
fclose($dz);
}
?>
<a href="news.php">Eintragen</a>
</BODY>
</HTML>

und die datenbank.txt ist einfach eine leere *.txt Datei.

Bitte helft mir !!!!!!!!

  1. Hallo!

    Ich habe mich jetzt nur auf die Dateizugriffe in PHP konzentriert.
    Du benutzt unten bei fopen ($dn,"a") das a,. Dadurch wird der Datenzeiger auf das ende von deiner Textdatei gesetzt und das neue hinten angehängt.

    Benutze statt dessen ($dn,"r+"). Jetzt wird der Datenzeiger an den Anfang der Textdatei gesetzt und das neue vorne eingefügt.

    <?php
    if ($speichern) {
    $dn="datenbank.txt";
    $dz=fopen($dn,"r+");
    fputs($dz, "<tr><td class=caption>news - $date </td></tr><tr><td class=date>$text</td></tr>" . chr(13) . chr(10));
    fclose($dz);
    }
    ?>

    Hoffe, das hilft.

    Gruß

    Harald

    1. Es tut mir leid wenn ich statt ($dn,"a"), ($dn,"r+") nehme wird das alte gelöscht und nur das neue wird angezeigt :( !

  2. Hallo,

    probier mal den den zentralen php-teil in news.php durch folgenden Code zu ersetzen (zumindest das Prinzip sollte funktionieren):

    <?php
    $ausgabe = array();
    $dn="datenbank.txt";
    $dz=fopen($dn, "r");
    $zeile=1;
    while (!feof($dz)) {
    $ausgabe[]=fgets($dz,80);
    //echo "<b>" .$ausgabe . "<br>";
    $zeile+=1;
    }
    fclose($dz);
    for ($i=sizeof($ausgabe)-1;$i>=0;$i--) {
     echo "<b>" . $ausgabe[$i] . "<br>";
    }
    ?>

    lg
    harald

    ps.: das news-script macht seinem Namen alle Ehre ;)

  3. Ich habe ein Newsscript das aus drei Dateien besteht erstens die Datei datenbank.txt, zweitens die news.php und index.php .
    Die News einzutragen Funzt einwandfrei bis auf das ein neuer Eintrag als letztes angezeigt wird.
    Kann man etwas machen das die Einträge mit dem neusten beginnend angezeigt werden ?

    Und hier der Quelltext

    Es gibt zwei Fehler, die man bei einer Frage machen kann:

    1. Man vergisst, Quelltext anzugeben und macht aus der Frage ein Ratespiel. Ich find's klasse, daß du das nicht gemacht hast.

    2. Man kopiert einfach von HTML-Dateien, Style-Sheets bis zu Mamas Einkaufszettel mit den Spreewälder Gurken alles mögliche und unmögliche in der Hoffnung, irgendwo wird da schon der Fehler sein.
    Aus dem Ratespiel wird dann ein heiteres Suchspiel, auf das wahrscheinlich genausoviele Lust haben, wie auf das Ratespiel.

    Quelltext Datei news.php :

    <head>
    <title>news</title>
    <style type="text/css">

    [Das meiste vom CSS gelöscht..]

    -->                                                <img src="grafic/dskhppsp_5x1.jpg" width="553" height="74" border="0" alt="">

    [..und gewundert, was dass denn wohl werden soll, so mitten im Stylesheet-Bereich?]

    </style>
    </head>

    <table width="471">

    [Und das hier erst..]

    <!-- One News Entry -->
    <tr>
    <td class="rank">
    .:]- [HoE] Hell on Earth News -[:.
    </td>
    </tr>
    </table>

    <body bgcolor="000000">

    [..wo der Inhalt doch erst hier anfängt.]

    <script language="Javascript1.2">

    [Javascript ist wohl für die Frage auch unwichtig]

    <body bgcolor="000000">

    [Hoppla, ein Déja-vu?!]

    <script language="Javascript1.2">

    [Noch mehr uninteressantes Javascript..]

    <!-- Begin Table -->

    [Das Teewasser kocht, jetzt wird interessant!]

    <table width="471">
    <?php
    $dn="datenbank.txt";
    $dz=fopen($dn, "r");
    $zeile=1;
    while (!feof($dz)) {
    $ausgabe=fgets($dz,80);
    echo "<b>" .$ausgabe . "<br>";
    $zeile+=1;
    }
    fclose($dz);
    ?>
    </table>

    So. Es hätte gereicht, wenn du geschrieben hättest, daß du deine Neuigkeiten zeilenweise in der Datei datenbank.txt hast, die neuesten immer hintendran, und diese dann auch zeilenweise wieder ausgibst.

    Was du also machen mußt, ist deine datenbank.txt von hinten aus auszulesen. Das ist etwas schwierig, deshalb machst du es ein klein wenig anders, es gibt eine praktische Funktion namens file():

    1. Mittels der Funktion file() liest du datenbank.txt in ein Feld ein, wobei jede Zeile eine Reihe im Feld ist.

    2. Mittels der Funktion array_reverse drehst du das ganze Feld um.

    3. Mittels einer Schleife gibst du den Inhalt dieses umgedrehten Feldes aus.

    Wobei man 2 und 3 eigentlich auch gleich zusammenfassen kann: Einfach in einer for-Schleife das Feld von hinten nach vorne auslesen.

    Gruß,
      soenk.e

    1. Du warst eine Minute schneller als ich *g* oder 3 weil ich das Programmieren nicht kann :-)

      mfg

  4. Das alles wird nicht recht viel helfen :-)

    Der Teil zum Schreiben ist o.k.

    Probiers mal so:

    <?
         $strDBFile = implode("", file("datenbank.txt"));

    $arr = split($strDBFile, "\n");
         $arr = array_reverse($arr);

    for($i = 0; $i < sizeof($arr); $i++) {
             echo "$i".$arr[i]."<br>";
         }
    ?>

    Erklärung:

    implode ist gleichwertig mit join. file lest eine Datei in ein Array. Somit ist die ganze Datei in einem Array, dass zu einem String strDBFile zusammengefügt wird. Danach wird gegen "\n" getrennt und die Arrayabfolge umgedreht ... :-)

    mfg

    Ich habe ein Newsscript das aus drei Dateien besteht erstens die Datei datenbank.txt, zweitens die news.php und index.php .
    Die News einzutragen Funzt einwandfrei bis auf das ein neuer Eintrag als letztes angezeigt wird.
    Kann man etwas machen das die Einträge mit dem neusten beginnend angezeigt werden ?

    Und hier der Quelltext

    Quelltext Datei news.php :

    <head>
    <title>news</title>
    <style type="text/css">
    <!--
    a{text-decoration:none; COLOR: #FFFFFF; font-family: "Verdana"; font-size: 7pt;}
    td.date {
    BORDER-BOTTOM: #6F6F6F 1px solid; BORDER-LEFT: #6F6F6F 1px solid; BORDER-RIGHT: #6F6F6F 1px solid; BORDER-TOP: #6F6F6F 1px solid; COLOR: #FFFFFF; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
    }
    td.caption {
    BORDER-BOTTOM: #C0C0C0 1px solid; BORDER-LEFT: #C0C0C0 1px solid; BORDER-RIGHT: #C0C0C0 1px solid; BORDER-TOP: #C0C0C0 1px solid; COLOR: #9F0000; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
    }
    td.rank {
    BORDER-BOTTOM: #C0C0C0 1px solid; BORDER-LEFT: #C0C0C0 1px solid; BORDER-RIGHT: #C0C0C0 1px solid; background-color: #000000; BORDER-TOP: #C0C0C0 1px solid; COLOR: #00FF00; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 7pt;
    }
    td.space {
    COLOR: #9F0000; PADDING-BOTTOM: 2px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; PADDING-TOP: 2px; font-family: "Verdana"; font-size: 9pt;
    }
    body { cursor='crosshair'}
    -->                                                <img src="grafic/dskhppsp_5x1.jpg" width="553" height="74" border="0" alt="">
    </style>
    </head>

    <table width="471">

    <!-- One News Entry -->
    <tr>
    <td class="rank">
    .:]- [HoE] Hell on Earth News -[:.
    </td>
    </tr>
    </table>

    <body bgcolor="000000">
    <script language="Javascript1.2">
    iens6=document.all||document.getElementById
    ns4=document.layers
    var speed=10
    if (iens6){
    document.write('<div id="container" style="position:relative;width:471;height:161;border:0px solid black;overflow:hidden">')
    document.write('<div align="center" id="content" style="position:absolute;width:471;center:yes;top:0">')
    }
    </script>
    <ilayer name="nscontainer" width="471" height=161 clip="0,0,175,160">
    <layer name="nscontent" width="471" height=161 visibility=hidden>
    <!--INSERT CONTENT HERE-->
    <body bgcolor="000000">

    <script language="Javascript1.2">
    if (document.all||document.getElementById)
    document.body.style.background="url('grafic/dskhppsp_2x1.jpg') white center repeat fixed"
    </script>

    <script language="Javascript1.2">
    if (document.all||document.getElementById)
    document.body.style.background="url('grafic/dskhppsp_2x1.jpg') white center repeat fixed"
    </script>

    <!-- Begin Table -->
    <table width="471">
    <?php
    $dn="datenbank.txt";
    $dz=fopen($dn, "r");
    $zeile=1;
    while (!feof($dz)) {
    $ausgabe=fgets($dz,80);
    echo "<b>" .$ausgabe . "<br>";
    $zeile+=1;
    }
    fclose($dz);
    ?>
    </table>
    <!-- End Table -->
    <!--END CONTENT-->
    </layer>
    </ilayer>
    <script language="Javascript1.2">
    if (iens6)
    document.write('</div></div>')
    </script>
    <table width="471"><td><p align="center">
    <a href="#" onMouseover="moveup()" onMouseout="clearTimeout(moveupvar)"><img src="grafic/up.gif" border=0></a>  <a href="#" onMouseover="movedown()" onMouseout="clearTimeout(movedownvar)"><img src="grafic/down.gif" border=0></a></p></td>
    <script language="Javascript1.2">
    if (iens6){
    var crossobj=document.getElementById? document.getElementById("content") : document.all.content
    var contentheight=crossobj.offsetHeight
    }
    else if (ns4){
    var crossobj=document.nscontainer.document.nscontent
    var contentheight=crossobj.clip.height
    }

    function movedown(){
    if (iens6&&parseInt(crossobj.style.top)>=(contentheight*(-1)+100))
    crossobj.style.top=parseInt(crossobj.style.top)-speed
    else if (ns4&&crossobj.top>=(contentheight*(-1)+100))
    crossobj.top-=speed
    movedownvar=setTimeout("movedown()",100)
    }

    function moveup(){
    if (iens6&&parseInt(crossobj.style.top)<=0)
    crossobj.style.top=parseInt(crossobj.style.top)+speed
    else if (ns4&&crossobj.top<=0)
    crossobj.top+=speed
    moveupvar=setTimeout("moveup()",100)

    }

    function getcontent_height(){
    if (iens6)
    contentheight=crossobj.offsetHeight
    else if (ns4)
    document.nscontainer.document.nscontent.visibility="show"
    }
    window.onload=getcontent_height
    </script>
        <table width="471">

    <!-- One News Entry -->
    <tr>
    <td class="rank">
    </td>
    </tr>
    </table>
    </body>

    Quelltext der index.php :

    <HTML>
    <HEAD>
    <TITLE>News Administration</TITLE>
    </HEAD>
    <BODY>
    <h2>Neue News eintragen</h2>
    <form action=""datenbank.php?speichern=1" method="post">
    <b>Datum:</b>
    <input type="text" name="date" size=15><br>
    <b>Text:</b>(HTML Erlaubt; KEIN Enter Tag nur für Absätze benutzen! Zeilenumbruch ist automatisch)<br>
    <textarea name="text" cols="80" rows="4"></textarea><br>
    <input type="submit" value="Speichern" name="speichern">
    <input type="reset" value="Leeren" name="leeren">
    </form>
    <?php
    if ($speichern) {
    $dn="datenbank.txt";
    $dz=fopen($dn,"a");
    fputs($dz, "<tr><td class=caption>news - $date </td></tr><tr><td class=date>$text</td></tr>" . chr(13) . chr(10));
    fclose($dz);
    }
    ?>
    <a href="news.php">Eintragen</a>
    </BODY>
    </HTML>

    und die datenbank.txt ist einfach eine leere *.txt Datei.

    Bitte helft mir !!!!!!!!

    1. Tut mir Leid es muss statt

      split($strDBFile, "\n");

      natürlich

      split("\n", $strDBFile);

      heißen

      mfg

    2. http://learn.to/quote

      :: linksetzer :: ja der aus der schweiz ::