bene: wie "markiere" ich bestimmete einträge in einer datei...

Hallo,

ich bin PhP neuling und habe folgendes Problem:

Ich will ein System coden, mit dem es möglich ist über ein Webinterface Daten auf einer Website (News) auszutauschen.

Bisher habe ich folgendes:

Die Daten kommen von einer Forumlareingabe und werden mittels fputs in eine txt datei geschrieben... kommen immer eine überschrift und ein inhalt hinzu.

Ich möchte nun diese Angaben im nachhinein auch ändern können.
Drum hab ich die Datei einfach in eine Textarea geladen und wenn man auf senden klickt wird die vorhandene txt Datei einfach überschrieben.

Nun mein Problem:
Wie "trenne" ich die Überschrift von dem Inhalt?? Ich will die Überschrift auch noch an einer anderen Stelle meiner Website inbinden... ausserdem soll sie anders formatiert werden als der Inhalt.
Wie kann ich nun die Überschrift getrennt von dem Inhalt ansprechen?

  1. Hallo
    Nunja. das einzige, was du tun könntest ist, die Überschrift zu kennzeichnen, also z.B. vor die Überschrift z.B. <HEADER> in die datei zu schreiben, wenn du die datei ausliest, musst du nur jede zeile nach dem Vorkommen des strings "<header>" untersuchen. ist es drin, entfernst du dieses und ersetzt es durch deine formatierung. eine andere möglichkeit wäre, die Überschrift in einen Div tag einzufassen z.B. <div class="title">blabla deine überschrift</div>. dann überprüft du nur noch die zeile nach dem vorkommen von <div class="title"> und gibst die zeile aus, die Klasse title kannst du dann über CSS definieren.
    achja, und ansonsten ersetzt du beim schreiben in die datei alle "<" und ">" durch < und > dann ist das einzige, was in Tags steht eben die überschrift... und die kannst du schön rausfiltern
    das wär eine möglichkeit..
    Mfg
    Matthias Huttar

    1. Hi,

      vielen Dank für Deine schnelle Antwort.

      das sieht dann in etwa so aus:

      fputs ($datei, "<div class="title">" );
      fputs ($datei, $ueber);
      fputs ($datei, "</div" );
      fputs ($datei, $content);

      aber wie suche ich dann nach dem string der zwischen <div...> und <div> steht ?

      Hallo
      Nunja. das einzige, was du tun könntest ist, die Überschrift zu kennzeichnen, also z.B. vor die Überschrift z.B. <HEADER> in die datei zu schreiben, wenn du die datei ausliest, musst du nur jede zeile nach dem Vorkommen des strings "<header>" untersuchen. ist es drin, entfernst du dieses und ersetzt es durch deine formatierung. eine andere möglichkeit wäre, die Überschrift in einen Div tag einzufassen z.B. <div class="title">blabla deine überschrift</div>. dann überprüft du nur noch die zeile nach dem vorkommen von <div class="title"> und gibst die zeile aus, die Klasse title kannst du dann über CSS definieren.
      achja, und ansonsten ersetzt du beim schreiben in die datei alle "<" und ">" durch < und > dann ist das einzige, was in Tags steht eben die überschrift... und die kannst du schön rausfiltern
      das wär eine möglichkeit..
      Mfg
      Matthias Huttar

      1. hallo, also zuerst einmal ein link, der dir sicherlich sehr hilfreich sein wird... http://www.php.net/manual/en/ref.strings.php
        da findest du alle String-Funktionen in PHP, das, was du brauchst ist strstr
        das funktioniert dann ca. so: if(strstr($line,"<div style="title">")) $line entspricht halt der variablen, in der die jeweilige linie gespeichert wird.
        die funktion gibt den rest des strings zurück, wenn das zu suchende drin ist, sonst gibt sie false zurück.
        hoffe, geholfen zu haben
        mfg
        Matthias huttar

        Hi,

        vielen Dank für Deine schnelle Antwort.

        das sieht dann in etwa so aus:

        fputs ($datei, "<div class="title">" );
        fputs ($datei, $ueber);
        fputs ($datei, "</div" );
        fputs ($datei, $content);

        aber wie suche ich dann nach dem string der zwischen <div...> und <div> steht ?

        1. ah... verstehe.
          dann muss ich also die datei in ein array auslesen, oder?

          mit explode , oder??

          bene

          hallo, also zuerst einmal ein link, der dir sicherlich sehr hilfreich sein wird... http://www.php.net/manual/en/ref.strings.php
          da findest du alle String-Funktionen in PHP, das, was du brauchst ist strstr
          das funktioniert dann ca. so: if(strstr($line,"<div style="title">")) $line entspricht halt der variablen, in der die jeweilige linie gespeichert wird.
          die funktion gibt den rest des strings zurück, wenn das zu suchende drin ist, sonst gibt sie false zurück.
          hoffe, geholfen zu haben
          mfg
          Matthias huttar

          Hi,

          vielen Dank für Deine schnelle Antwort.

          das sieht dann in etwa so aus:

          fputs ($datei, "<div class="title">" );
          fputs ($datei, $ueber);
          fputs ($datei, "</div" );
          fputs ($datei, $content);

          aber wie suche ich dann nach dem string der zwischen <div...> und <div> steht ?

          1. ah... verstehe.
            dann muss ich also die datei in ein array auslesen, oder?

            mit explode , oder??

            bene

            nein, musst du eigentlich nicht. ist eine möglichkeit.
            ich würd folgendes vorschlagen (kopier den sourcecode nicht, der ist nur aus dem kopf überlegt, nur damit du in etwa verstehst was ich meine)
            MACHT MICH HIER AUF KEINE SYNTAXFEHLER AUFMERKSAM!! DAS IST NICHT GENAU ÜBERPRÜFT

            while(!feof($inputfile))
            {
            $line=fgets($inputfile,1000);
            #angenommen du willst jetzt nur die überschriften ausgeben:
            if(strstr($line,"<div style="title">")) {print $line;}
            }

            wenn du jetzt alles ausgeben willst (durch irgendwas getrennt):
            while(!feof($inputfile))
            {
            $line=fgets($inputfile,1000);
            #angenommen du willst jetzt nur die überschriften ausgeben:
            if(strstr($line,"<div style="title">")) {print "nächster Artikel beginnt hier <br><hr><p>"$line;}
              else {print $line;}
            }
            eigentlich recht einfach, du könntest noch weitere markierungselemente hinzufügen (eben XML haft, wie an anderer stelle schon beschrieben wurde)
            somit könntest du die beiträge auch benamen und auf wunsch auch nur einen einzigen ausgeben..

            1. eigentlich recht einfach, du könntest noch weitere markierungselemente hinzufügen (eben XML haft, wie an anderer stelle schon beschrieben wurde)
              somit könntest du die beiträge auch benamen und auf wunsch auch nur einen einzigen ausgeben..

              vielen dank.

              das hat mich schon um eineiges weiter gebracht.

              aber mein hauptproblem:
              wie kann ich das mit dem "ändern" und "löschen" der beiträge umsetzten?
              hast du eine idee.

              sorry, dass ich soviel "dumme" fragen stelle, aber ich bin absoluter neuling in sachen php nd programmieren.

              grüße

              bene

              1. hallo
                Glaube mir, ich bin auch recht neu in PHP, nur ich komm von C++ und PERL und wenn du das halbwegs kannst ist PHP traumhaft einfach... wirklich herrlich... (das einzige, was ich an PHP vermisse ist ein noch besseres File Handling. ála PERL nämlich. dü öffnest das file, und weisst einem array einfach das file zu (@array=<file>) und schon hast du das ganze file in nem array (jeder eintrag ist eine Zeile) bzw. du weisst es einfach ner Variablen zu und schon hast die erste zeile drinnen.
                und auch dumme fragen müssen gestellt werden, und im vergleich zu anderen sind deine Fragen nicht dumm (ein freund von mir wollte PHP lernen, und hat sich eingebildet, er braucht nix über HTML wissen, DA sind dumme Fragen rausgekommen)...

                machen wir wieder mal das einfachste:
                nehmen wir an, du hast eine fixe Zahl an News auf deiner Seite (das ist jetzt das einfachste Modell) dann hast du ein formular mit fünf einträgen für den Titel und fünf Einträgen für den Text. Das Formular an wird in einer PHP datei erzeugt, die vorher schon die einzelnen Beiträge aus der Datei rausliest (NOCH einfacher: für jeden Beitrag eine datei, aber das dauert viel länger zum laden). du musst halt irgendwie eine trennung zwischen den absätzen einfügen
                also z.b.
                <news 1>
                <div class="title">sdalsdjf</div>
                asfasöflasjfölask fölkasjf
                <news 2>
                <div class=".... usw
                dann überprüfst du im oben genannten Schema ob es sich wieder um ein neues News handelt. wenn ja, schreibst du es in das nächste eingabefeld.
                also jedes news und jede headline kommt in ein eingabefeld.
                Du kannst jetzt alles beliebig verändern, und wenn du auf speichern klickst, schickst du über POST alle 10 Eingabefelder an ein PHP script, dass damit die news Datei komplett neu schreibt. Das ist zwar billig, aber einfach.
                noch ein kleiner TIP für unterwegs: wenn du alles nur aus Internet Tutorials lernst, würd ich mir ein Buch kaufen, gedrucktes ist einfach besser (v.a. weil du es neben dem bildschirm liegen hast und nicht immer fenster wechselst un es auch nicht aus dem tutorial kopieren kannst) Ein Buch, dass meiner Meinung nach nicht so schlecht ist, ist aus dem BHV Verlag "PHP 4" von Uwe Hess und Günter Karl. Es ist auch eine CD ROM mit beispielen dabei, es sind über 750 Seiten und kostet ca. 200 ATS (30 DM) und deckt alles halbwegs ab, du kannst den link von weiter oben als ergänzung benutzen, das würde ich dir sehr empfehlen.
                So, den Quellcode dazu versuch dir selbst zu überlegen, du willst ja schließlich programmieren lernen ;) Wenn du es nicht schaffst, helf ich dir weiter

                mfg Matthias Huttar

                PS: beiträge löschst du, indem du die felder leer lässt... und dann halt irgendwie überprüfst, ob der Beitrag noch da ist oder nicht..

                1. hallo
                  Glaube mir, ich bin auch recht neu in PHP, nur ich komm von C++ und PERL und wenn du das halbwegs kannst ist PHP traumhaft einfach... wirklich herrlich...

                  glaub ich dir *g* nur kann ich überhaupt nicht programmieren ;-(

                  gut.

                  ich hab jetzt mal folgendes versucht:

                  <form action="<? echo $PHP_SELF?>" method="post">

                  <?php

                  $inputfile = fopen("daten.txt","r");

                  while(!feof($inputfile))
                   {
                   $line=fgets($inputfile,1000);
                   if(strstr($line,"<ueberschrift>"))
                    {
                    print "<input type="text" name="aenderueber" value="";
                    print $line;
                    print "">";
                    print "<br>";
                    }
                   else {
                    print "<textarea name="aendercon">";
                    print $line;
                    print "</textarea>";
                    print "<br>";
                   }
                  }

                  ?>

                  <input type="submit" value="ändern">
                  </form>

                  dadurch werden die einzelnen zeilen in eingabefelder ausgelesen.
                  aber wie "speichere" ich sie nun in der datei ??
                  klar, das überschreiben geht mit fopen(daten.txt, r+) und fputs.
                  aber mir ist nicht ganz klar wie ich die felder der namen dann dynamisch generiere... oder wie ich das sonst machen soll, dass die daten wieder in die txt datei gelistet werden ?!

                  vielleicht geht es, indem ich die namen der txt datei abhängig von der zeilennummer mach?

                  grüße

                  bene

                  1. so.. jetzt hab ich einen zähler eingebuat:

                    $inputfile = fopen("daten.txt","r");

                    $a = 0;
                    $b = 0;

                    while(!feof($inputfile))
                     {
                     $line=fgets($inputfile,1000);
                     if(strstr($line,"<ueberschrift>"))
                      {
                      print "<input type="text" name="ueber";
                      print $a;
                      print "" value="";
                      print $line;
                      print "">";
                      print "<br>";
                      $a++;
                      }
                     else
                      {
                      print "<textarea name="cont";
                      print $b;
                      print "">";
                      print $line;
                      print "</textarea>";
                      print "<br><br>";
                      $b++;
                      }
                    }

                    fclose ($inputfile);

                    aber wie gebe ich das ganze jetzt am besten wieder in die txt datei aus ?

                    1. Hallo.
                      Also dass du zum zähler zwei variablen verwendest, ist gänzlich unnötig.
                      nimm eine, setze sie anfangs auf null und dann erhöhe sie entweder beim If oder beim else. Das reicht völlig.
                      das nächste: du brauchst nicht ein neues print machen, nur weil du eine variable ausgeben möchtest.
                      es geht genauso:

                      print "<input type="text" name="ueber$a" value="$line">";
                      nun ja.
                      jetzt tust du es der Reihe nach in eine Datei...
                      Du postest das ganze also... dann erhältst du die variablen
                      $ueber1 $cont1 $ueber2 $cont2 usw... die tust du dann einfach in ne datei...
                      also so in die art

                      fwrite($newfile, "<div class=blabla>$ueber1</div>\n$cont1\n<NEXT><div class=blabla>$ueber2 ...... );
                      in etwa. du solltest vielleicht mehrere fwrites verwenden...
                      aber vom Prinzip her stimmt das.

                      so, mehr dazu morgen, meine arbeit möchte auch noch getan werden..
                      cu
                      Matthias Huttar

  2. Grüssi!

    Die Daten kommen von einer Forumlareingabe und werden mittels fputs in eine txt datei geschrieben... kommen immer eine überschrift und ein inhalt hinzu.

    Du hast mehrere Möglichkeiten, deine Daten abzuspeichern:

    Du kannst die HTML Definitionen gleich so abspeichern wie du sie später anzeigen willst:
    --
    <h1>Erste Überschrift</h1> <p>Content</p>
    <h1>Zweite Überschrift</h1> <p>Content</p>
    ...
    --

    Der Nachteil dabei ist, du hast Daten und Layout zusammen abgelegt, und wenn du dieselben Daten z.b. für eine andere Anwendung anders darstellen willst, macht das Umstände!

    Du kannst auch gute alte Trennzeichensyntax verwenden, und an der Reihenfolge der eingelesenen Blöcke in der Zeile auf die Semantik die dieser Block ausdrückt schliessen, anders gesagt:
    --
    Überschrift 1 §§ Content
    Überschrift 2 §§ Content
    ...
    --

    Diese Variante ist recht einfach zu implementieren, und auch recht flexibel. Es kommt - vom Datenmodell her - am nähesten an eine "Datenbank" heran. Der Nachteil ist, wenn du nicht nur zwei Datenfelder hast, sondern es z.b. mal 10 oder mehr werden sollen, leidet die Übersicht ein wenig. Du musst dir dann irgendwie merken, in welches Feld was reingespeichert werden soll. (Das ist übrigens eine gute Variante, wenn du dich in eine Firma "einzementieren" willst. Manche Leute programmieren absichtlich solche Sachen, damit keiner ausser ihnen das lesen kann, und somit ihr job bis zur Pension gesichert ist ;-)

    die dritte möglichkeit wäre eine xml-syntax:
    --
    <eintrag>
     <kopfdaten>
      <titel>Überschrift 1</titel>
     </kopfdaten>
     <body>Content</body>
    </eintrag>
    <eintrag>
     <kopfdaten>
      <titel>Überschrift 2</titel>
     </kopfdaten>
     <body>Content</body>
    </eintrag>
    .....
    --
    Wie du siehst, musst du hierbei zusätzlichen Speicherplatz für die Metainformationen einkalkulieren, dafür ist diese art der Datenablage skalierbar. Man kann das Ding schnell mal erweitern. Du kannst mit von den Sprachen zur Verfügung gestellten xml-Parsern die Datei auslesen, vorausgesetzt die Datei ist wohlgeformt natürlich!

    Eine letzte Möglichkeit die mir einfallen würde wäre so eine Art ini-style, wie in Windows bei den ini-Dateien

    --
    [Eintrag]
    Überschrift = Überschrift 1
    Text        = Content
    [Eintrag]
    Überschrift = Überschrift 2
    Text        = Content
    ...
    --

    Deiner Kreativität sind also keine Grenzen gesetzt ;-) Wenn du nicht allzuviel verschiedene Arten von Daten hast, also solange es nur um Überschrift und Content geht, würde ich die Trennzeichen-syntax nehmen. Wenn du vorhast, in Zukunft mehr Informationen mitabzulegen, würde ich dir zu xml- oder ini-Syntax raten.

    lg bernhard

    1. hi,

      vielen dank für die schnelle und ausführliche antowrt.

      ich werde mal das mit den trennzeichen versuchen.
      aber wie lese ich das dann getrennt aus (ich bin absoluter php neuling)? mit welchem befehl?

      ein weiteres problem ist, dass sich die datei ja ständig erweitert...

      Grüssi!

      Die Daten kommen von einer Forumlareingabe und werden mittels fputs in eine txt datei geschrieben... kommen immer eine überschrift und ein inhalt hinzu.

      Du hast mehrere Möglichkeiten, deine Daten abzuspeichern:

      Du kannst die HTML Definitionen gleich so abspeichern wie du sie später anzeigen willst:

      <h1>Erste Überschrift</h1> <p>Content</p>
      <h1>Zweite Überschrift</h1> <p>Content</p>
      ...

      Der Nachteil dabei ist, du hast Daten und Layout zusammen abgelegt, und wenn du dieselben Daten z.b. für eine andere Anwendung anders darstellen willst, macht das Umstände!

      Du kannst auch gute alte Trennzeichensyntax verwenden, und an der Reihenfolge der eingelesenen Blöcke in der Zeile auf die Semantik die dieser Block ausdrückt schliessen, anders gesagt:

      Überschrift 1 §§ Content
      Überschrift 2 §§ Content
      ...

      Diese Variante ist recht einfach zu implementieren, und auch recht flexibel. Es kommt - vom Datenmodell her - am nähesten an eine "Datenbank" heran. Der Nachteil ist, wenn du nicht nur zwei Datenfelder hast, sondern es z.b. mal 10 oder mehr werden sollen, leidet die Übersicht ein wenig. Du musst dir dann irgendwie merken, in welches Feld was reingespeichert werden soll. (Das ist übrigens eine gute Variante, wenn du dich in eine Firma "einzementieren" willst. Manche Leute programmieren absichtlich solche Sachen, damit keiner ausser ihnen das lesen kann, und somit ihr job bis zur Pension gesichert ist ;-)

      die dritte möglichkeit wäre eine xml-syntax:

      <eintrag>
      <kopfdaten>
        <titel>Überschrift 1</titel>
      </kopfdaten>
      <body>Content</body>
      </eintrag>
      <eintrag>
      <kopfdaten>
        <titel>Überschrift 2</titel>
      </kopfdaten>
      <body>Content</body>
      </eintrag>
      .....

      Wie du siehst, musst du hierbei zusätzlichen Speicherplatz für die Metainformationen einkalkulieren, dafür ist diese art der Datenablage skalierbar. Man kann das Ding schnell mal erweitern. Du kannst mit von den Sprachen zur Verfügung gestellten xml-Parsern die Datei auslesen, vorausgesetzt die Datei ist wohlgeformt natürlich!

      Eine letzte Möglichkeit die mir einfallen würde wäre so eine Art ini-style, wie in Windows bei den ini-Dateien

      --
      [Eintrag]
      Überschrift = Überschrift 1
      Text        = Content
      [Eintrag]
      Überschrift = Überschrift 2
      Text        = Content
      ...

      Deiner Kreativität sind also keine Grenzen gesetzt ;-) Wenn du nicht allzuviel verschiedene Arten von Daten hast, also solange es nur um Überschrift und Content geht, würde ich die Trennzeichen-syntax nehmen. Wenn du vorhast, in Zukunft mehr Informationen mitabzulegen, würde ich dir zu xml- oder ini-Syntax raten.

      lg bernhard

      1. Grüssi!

        vielen dank für die schnelle und ausführliche antowrt.

        Bitte, gern geschehen, aber bitte künftig nicht mehr benötigte Stellen aus dem Antwortposting rauslöschen, ja?

        http://learn.to/quote :-)

        aber wie lese ich das dann getrennt aus (ich bin absoluter php neuling)? mit welchem befehl?

        Du lest zeile für Zeile aus, in jeder Zeile steht: "irgendwas §§ irgendwas" Du musst nur die zeile trennen und zwar genau beim Zeichen '§§' und die Wertte in den Feldern verschiedenen Variablen zuweisen. Genau das macht der split()-Befehl für dich:

        http://www.php.net/manual/en/function.split.php

        ein weiteres problem ist, dass sich die datei ja ständig erweitert...

        Was wird erweitert? Spalten oder Zeilen? (Mit Spalten meine ich die Datenfelder, die mit '§§' getrennt werden) Wenn solche dazukommen, musst du die split()-Anweisung entsprechend anpassen, wenn - was ich annehme - du Zeilen gemeint hast, die einfach angehängt werden, dann brauchst du gar nix machen, denn die werden in einer Schleife aus der Datei eingelesen, solange bis die Letzte zeile eingelesen wurde, und der Dateizeiger auf EOF (End-of-file) steht :-)

        lg bernhard

        1. Bitte, gern geschehen, aber bitte künftig nicht mehr benötigte Stellen aus dem Antwortposting rauslöschen, ja?

          ok... werd ich machen...

          Du lest zeile für Zeile aus, in jeder Zeile steht: "irgendwas §§ irgendwas" Du musst nur die zeile trennen und zwar genau beim Zeichen '§§' und die Wertte in den Feldern verschiedenen Variablen zuweisen. Genau das macht der split()-Befehl für dich:

          ich hab das mal so versucht:
          fubnktioniert aber net !

          $fd = fopen("daten.txt","r");
          while (!feof($fd)) {
           $buffer = fgets($fd, 4096);
           list ($ueberschrift,$inhalt) = split("§§", $buffer);
          }
          fclose ($fd);

          Was wird erweitert? Spalten oder Zeilen?

          ja. ich meine zeilen.

          wie würdest denn du dieses news einpfelgen lösen ??
          sie müssen auf jedenfall zu ändern sein.

          grüße

          bene

          1. wart mal... mit dieser Syntax liest du jedoch nur zeilenweise ein. d.h. bis zum ende der zeile, dann ist das einlesen vorbei.
            d.h. deine datei müsste so aussehen:
            Überschrift§§erster absatz.<p>zweiter absatz<p>dritter absatz etc... (der ganze artikel in einer Zeile.)
            ich empfehle dir weiterhin meine Methode...
            ist einfacher finde ich. Da brauchst du auch nichts aufspalten oder so...

            1. Grüssi!

              wart mal... mit dieser Syntax liest du jedoch nur zeilenweise ein. d.h. bis zum ende der zeile, dann ist das einlesen vorbei.
              d.h. deine datei müsste so aussehen:
              Überschrift§§erster absatz.<p>zweiter absatz<p>dritter absatz etc... (der ganze artikel in einer Zeile.)

              Moment mal, schätze ich hab vergessen zu sagen, dass der content natürlich in eine Zeile muss, ich dachte das wär klar ;-) Wenn du allerdings den Content reinschreiben willst, so wie er im Quelltext erscheint, dann hat Matthias recht! Es sollte dann nur die Überschrift ausgezeichnet werden.

              Du könntest die Daten natürlich beliebig auszeichnen, es liegt an dir, wie du dir Programmiertechnisch leichter tust. Eine weitere Möglichkeit wäre z.b.:

              <§§ Erste Überschrift §§>
              Erster
              Absatz
              Zweiter
              Absatz
              ...
              <§§ Zweite Überschrift §§>
              Erster
              Absatz
              ...

              Deiner Fantasie sind keine Grenzen gesetzt, du musst nur aufpassen, dass du keine Zeichenkombinationen als Markierungen verwendest, die im Text ev. vorkommen könnten!

              ersetze '<§§' durch '<h1>' und '§§>' durch '</h1>', ansonsten schreib einfach die Zeile raus, so wie sie in der Datei steht. Du kannst auch die <p>-Tags maskieren.

              lg bernhard

              1. jup...

                ich hab jetzt die überschrift mit <überschrift> maskiert.
                beim auslesen wird -wie von euch beschrieben- nach dem string gesucht.

                mein größtes problem ist aber nich:

                wie soll ich das mit dem ändern und löschen der beiträge hinbekommen.

                ich dachte mir, dass ich die einzelnen zeilen in eine textarea lade und dann die txt datei überschreibe ?!

                wie setzt ich sowas um ?

                viele grüße

                benedikt hermann

                1. hallo
                  hast du den beitrag von mir unten gelesen. da steht vom prinzip her drin, wie das geht.
                  versuch, es selbst in code umzusetzen, wennst nicht weisst, wie, frag weiter..

                  1. hast du den beitrag von mir unten gelesen. da steht vom prinzip her drin, wie das geht.

                    jup habs gelesen... und auch schon wieder gefragt ;-(

                2. Grüssi!

                  wie soll ich das mit dem ändern und löschen der beiträge hinbekommen.

                  <eintrag> 1
                  <titel>Überschrift
                  <text> sdafds
                  fsadfsdf
                  sdfsd

                  <eintrag> 2
                  <titel> Überschrift
                  <text> sadf asdf asdf
                  sadfasdfasd
                  f asd
                  f asdf sdfasdf

                  Wenn du ändern willst: frag einfach ab, ob der Eintrag die richtige ID hat (die Zahl hinter <eintrag>!) wenn ja, liest du sie aus wie bisher, ansonsten lies weiter die Datei bis zum nächsten Eintrag, dann prüfst du wieder: ist die ID richtig ....

                  Wenn du löschen willst: Beginn von vorn, lies ein und überprüf wieder ob die ID passt. Wenn nicht, dann speichere die Daten in Variablen (bsp: titel[$id]=$zeile_titel, $content[$id]=$zeile_text) Wenn ja, dann lass sie beim speichern einfach aus. Wenn du am Ende angelangt bist, öffnest du die Datei ein zweitesmal, diesmal zum schreiben, und schreibst die Daten, die du im Array gespeichert hast wieder rein!

                  Wenn du neue News anhängen willst: Lies *alle* alten zuerst ähnlich wie beim Löschen aus, nur brauchst du hier die ID nicht prüfen, dann öffne die Datei zum Schreiben, schreib zuallererst den neuen Eintrag rein, und dann wieder in einer Schleife die alten Daten aus den Arrays.

                  So, diese Lösung gefällt mir nun selber auch schon ganz gut ;-)

                  lg bernhard

  3. Hallo,

    Auch wenn du schon antworten erhalten hast (die lösungsbeispiele gefallen mir nicht :)

    bau deine txt datei als CSV datei auf.

    ID;Überschrift;Text

    zb.
    1;Neue News;Da steht viel text den keiner liest
    2;Heute brandaktuell;die zweite news des tages

    um die neuws auszugeben genügt ein einfaches:

    $file=file('path/to/file.txt');

    for($i=0;$i<count($file);$i++){
    $data=explode(';',$file[$j]);echo "<h1>".$data[1]."</h1><p>".$data[2]."</p>;
    }

    Willst du die News hinzufügen bzw ändern solltest du bedenken das die neuerste news oben stehen soll. Und das der User (bzw admin) nur immer eine news ändern kann.

    Mit obiger schleife kannst du nun eine tabelle genereriern, bei der der user auswählt welche news er editierien will (dafür hast du die id an erster stelle) ID-1 ist index im array :)

    nun ist es ein leichtes wieder mit obiger schleife und einer ifabfrage, nur diese eine news in ein formular zu stellen (header und text getrennt) als hidden feld gibst du die ID der news an.

    Wenn du das formular nun wieder erhälst (user drückte auf submit, durchläufst du wieder obige schleife, bis $file[$i][0]==$id ($id, $head, und $subhead kommt aus dem hidden feld bzw aus dem formular. das würde so ausssehen:

    $newfile=array();
    for($i=0;$i<count($file);$i++){
    $data=explode(';',$file[$j]);
    if($data[0]==$id){
     $newfile[$i]="$i;$head;$subtext
    }else{
     $newfile[$i]=$data[$j];
    }
    }

    Somit steht die news wieder an der gleichen stelle wie vorher.

    Um eine neue news an die erste stelle zu setzen verfährst du so ähnlich:

    $count=count($file);
    $newfile="1;$head;$subhead\n";

    for($i=0;$i<count($file);$i++){
    $data=explode(';',$file[$j]);
     $newfile.=$data[0]+1";$data[1];$data[2]\n";
    }

    Somit hast du ein system das du auch leicht um zusätzliche felder erweitern kannst, ohne den ganzen code umschreiben zumüssen. zb wenn du ein Datum, Author name,etc pp hinzufügen willst.

    lg
    Ludwig

    DISCLAIMER: code is untested, sollte aber funktioniern.
    Bei fragen, ich schau in ein paar stunden nochmal rein :)