Markus: Forumanzeige erst nach aktualisieren?

Hi,

Hab' ein Forum geschrieben, in dem ich Anzeige, Eingabeformular und Schreibvorgang in einer Datei vereint habe. Die Einträge werden auch alle in die dafür vorgesehene textdatei geschrieben, welche mit include("forumeintraege1.txt") includiert werden soll. Und nach 10 Einträgen wird immer eine neue Seite (zB: "forumeintraege2.txt") erstellt. Das Problem: Sobald eine neue Seite eröffnet wird durch einen geschriebenen Eintrag, muss die forum.php erst aktualisiert werden, damit der Eintrag überhaupt angezeigt wird. Ansonsten sieht man die vorherige Seite (z.B.: "forumeintraege1.txt"). Bei den anderen Einträgen funktioniert das ganze sofort. Nur bei diesen "Neueinträgen" klappt's nicht. Warum???

Markus

  1. echo $begrüßung;

    Warum???

    Mein persönliches Orakel sagt mir, es läge an der Ursache. Das Script würde wunschgemäß laufen, wenn du den Quelltext (dieses Wort hat es besonders betont -- ich weiß gar nicht warum) entsprechend änderst.

    echo "$verabschiedung $name";

    1. Hi,
      Also hier mal mein Quelltext:

        
      <?  
      //=====Variablenübergabe==========================================  
      $name=$_POST['name'];  
      $text=$_POST['text'];  
      $email=$_POST['email'];  
      $homepage=$_POST['homepage'];  
        
      //=====Anzahl der Seiten auslesen=================================  
      $seiten_lesen=fopen("./secure/forum/seitenzahl.dat", "r");  
      $seiten=fgets($seiten_lesen, 10);  
      $seiten=trim($seiten);  
      $s1=$seiten+1;  
      $seitenzahl=$s1-$seite;  
        
      
      

      Warum funktioniert das hier nicht???:

        
      //################################################################  
      if (!preg_match('/^.*\w+$/', $name) $fehl="Name";  
      if (!preg_match('/^.*\w+$/', $text) $fehl="Text";  
      //################################################################  
        
        
      //=====Anzahl der Einträge um eins erhöhen========================  
      $nummer_lesen=fopen("./secure/forum/forumzahl.dat", "r");  
      $zahl=fgets($nummer_lesen, 10);  
      $zahl=trim($zahl);  
      $zahl++;  
      $nummer_schreiben=fopen("./secure/forum/forumzahl.dat", "w");  
      fwrite($nummer_schreiben, $zahl);  
        
      //================================================================  
      $a=$zahl-1;  
      if ($a%10==0) /* Wenn 30 Einträge existieren ... */  
        {  
        $seiten_lesen=fopen("./secure/forum/seitenzahl.dat", "r");    /* ... Seitenzahl um 1 erhöhen und */  
        $seiten=fgets($seiten_lesen, 10);  
        $seiten=trim($seiten);  
        $seiten++;  
        $seiten_schreiben=fopen("./secure/forum/seitenzahl.dat", "w");  
        fwrite($seiten_schreiben, $seiten);  
      //-------------------------------------------------------------------------------------------  
        $seitenzahllinks=fopen("./secure/forum/seitenzahllinks.dat", "a");   /* ... neuer Seitenlink */  
        fwrite ($seitenzahllinks, "&nbsp;·&nbsp;<a href=\"forum.php?seite=".$seiten."\">".$seiten."</a>");  
        }  
        
      //================================================================  
      $eintrag="\n<table border=\"1\" width=\"100%\" bordercolor=\"#d2dfec\" cellpadding=\"3\" cellspacing=\"0\">  
       \n<tr bgcolor=\"$background\">  
        \n<td valign=\"top\">  
        \n<font color=\"#000000\" face=\"Arial,Helvetica,MS Sans Serif\" size=\"1\">$zeit</font>  
        \n</td>  
       \n</tr>  
       \n<tr bordercolor=\"#CAE1F7\" bgcolor=\"$background\">  
          \n<td>  
       \n<font color=\"#000000\" face=\"Arial,Helvetica,MS Sans Serif\" size=\"2\">  
        \n<br>  
         \n$text  
        \n<br><br>  
       \n</font>  
       \n</td>  
       \n</tr>  
       \n<tr bgcolor=\"$background\">  
          \n<td>  
        \n<font color=\"#000000\" face=\"Arial,Helvetica,MS Sans Serif\" size=\"2\">  
         \n<b>$name</b>  
         \n&nbsp; · &nbsp;";  
      if ($email!="") $eintrag.="\n<a href=\"mailto:$email\"><img src=\"./images/email.gif\" border=\"0\"></a>";  
      if ($homepage!="") $eintrag.="\n<a href=\"http://$homepage\" target=\"_blank\"><img src=\"./images/homepage.gif\" border=\"0\"></a>";  
      $eintrag.="\n</font>  
       \n</td>  
       \n</tr>  
      \n</table><br>\n";  
        
      //========Abspeichern des Eintrags in Textdatei===================  
      $alteEintraege=file("./secure/forum/eintraege_$seiten.dat");  
      $AnzahlDerEintraege=count($alteEintraege);  
      $eintraege="$eintrag$alteEintraege[0]";  
        for ($z=1; $z<$AnzahlDerEintraege; $z++)  
        {  
          $eintraege="$eintraege$alteEintraege[$z]";  
        }  
      $datei=fopen("./secure/forum/eintraege_$seiten.dat", "w");  
        
      fwrite ($datei, $eintraege);  
      //================================================================  
      ?>  
      
      

      Der HTML-Quellcode sieht dann so aus:

        
      <? if (isset($fehl)) { ?>  
      Ihr <? echo $fehl; ?> ist fehlerhaft!  
      <? } ?>  
      
      
        
      <form action="forum?seite=1" name="eingabe" method="post">  
      Name: <input name="name" type="text" id="name" size="20" maxlength="40">  
      Email: <input name="email" type="text" id="email" size="20" maxlength="40">  
      Homepage: <input name="homepage" type="text" id="homepage" size="20" maxlength="40">  
      Text: <textarea name="text"></textarea>  
      <input type="submit" name="submit" value="Absenden">  
      </form>  
        
      <h3>Anzahl der Einträge: 
      ~~~`<? include("./secure/forum/forumzahl.dat"); ?>`{:.language-php} </h3>  
      Seiten:</i></b> ~~~php
      <? echo $seitenzahllinks; ?>  
      <? include("./secure/forum/eintraege_$seitenzahl.dat"); ?>  
      
      
      1. echo $begrüßung;

        Sobald eine neue Seite eröffnet wird durch einen geschriebenen Eintrag, muss die forum.php erst aktualisiert werden, damit der Eintrag überhaupt angezeigt wird. Ansonsten sieht man die vorherige Seite (z.B.: "forumeintraege1.txt"). Bei den anderen Einträgen funktioniert das ganze sofort. Nur bei diesen "Neueinträgen" klappt's nicht. Warum???

        Das Eingabeformular ruft dein Script immer mit dem Parameter seite=1 auf. Liegt es daran? Ansonsten lass dir die Inhalte der Variablen ausgeben und vergleich diese mit dem von dir erwarteten Wert.

        Dein Code ist schlecht dokumentiert. Wenn du nicht gerade ein phänomenales Gedächtnis besitzt, wirst auch du das später einmal zu schätzen wissen, wenn du kommentierst, was du mit den Teilen deines Codes für Absichten hattest. Zum Beispiel, warum du beim Auslesen der seitenzahl.dat diese Berechnungen anstellt. Ich müsste das erst mühsam nachvollziehen und du weißt das später bestimmt auch nicht mehr.

        Warum funktioniert das hier nicht???:

        if (!preg_match('/^.*\w+$/', $name) $fehl="Name";

        Dokumentation! Was beabsichtigst du damit?

        Am Anfang des Strings ^ sollen 0 oder beliebig viele * beliebige Zeichen . stehen, gefolgt von mindestens einem oder mehreren + "word" Zeichen \w die vor dem Stringende $ stehen. Und wenn das nicht zutriff, wird die Variable $fehl belegt. Ich weiß nicht, ob es das ist, was du willst, aber mehr konnte ich da nicht herauslesen.

        echo "$verabschiedung $name";

        1. Hi,

          Das Eingabeformular ruft dein Script immer mit dem Parameter seite=1 auf.

          Seite=1 nur deswegen, damit die erste Forumseite angezeigt wird!

          if (!preg_match('/^.*\w+$/', $name) $fehl="Name";

          Dokumentation! Was beabsichtigst du damit?

          Ich will eigentlich nur, dass überprüft wird, ob die Variable $name aus einem oder mehreren Wort-Charakteren besteht.

          Wie gesagt, ich kenn' mich da überhaupt nicht aus, was diese Pattern angeht

          Mfg
          Markus

          1. echo $begrüßung;

            Ich will eigentlich nur, dass überprüft wird, ob die Variable $name aus einem oder mehreren Wort-Charakteren besteht.

            Ein word Zeichen: \w,
            eins oder beliebig viele davon: \w+
            davor nichts ^\w+
            und danach auch nichts ^\w+$

            Der passende Kommentar könnte lauten:
            Prüfung auf zulässige Eingabewerte; nur Buchstaben, Ziffern und _ sind zulässig.

            echo "$verabschiedung $name";

            1. Kann mir jemand sagen, was daran falsch ist?:

                
              if (!preg_match('/.*\w+/', $text) $fehler="Ihr Text ist fehlerhaft.";  
              
              
              1. Übrigens,
                Eine Pattern für BUCHSTABEN-Charakter gibt es nicht, oder?

                1. puts "Hallo " + gets.chomp + "."

                  ?> Markus
                  => Hallo Markus.

                  Eine Pattern für BUCHSTABEN-Charakter gibt es nicht, oder?

                  Finde es selbst heraus. ;-)

                  Einen schönen Montag noch.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                  30 Days to becoming an Opera8 Lover -- Day 20: search.ini
                  Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                  [Deshalb frei! - Argumente pro freie Software]
                  1. Also gut, bis jetzt sind ja schon einige Probleme behoben, aber ihr habt mir immer noch keine Lösung für mein Problem (siehe Themafrage) geboten
                    Ich wiederhole:
                    Sobald eine neue Seite eröffnet wird durch einen geschriebenen Eintrag, muss die forum.php erst aktualisiert werden, damit der Eintrag überhaupt angezeigt wird. Ansonsten sieht man die vorherige Seite (z.B.: "forumeintraege1.txt"). Bei den anderen Einträgen funktioniert das ganze sofort. Nur bei diesen "Neueinträgen" klappt's nicht. Warum???

                    1. echo $begrüßung;

                      Also gut, bis jetzt sind ja schon einige Probleme behoben, aber ihr habt mir immer noch keine Lösung für mein Problem (siehe Themafrage) geboten
                      Ich wiederhole:

                      Dem schließ ich mich an.

                      Warum???

                      Das kannst du herausfinden, wenn du dir die Inhalte der Variablen ausgibst und mit den von dir erwarteten Werten vergleichst. Da du sicher noch weißt, was du mit den Berechnungen für Resultate erziehlen wolltest, hast du von uns allen die besten Voraussetzungen dafür.

                      echo "$verabschiedung $name";

              2. OK, Ich bin ein totaler Idiot :-)
                Hab' die Klammer vergessen:

                if (!preg_match('/.*\w+/', $text) $fehler="Ihr Text ist fehlerhaft.";

                  
                Muss richtig heißen:  
                
                > ~~~php
                  
                
                > if (!preg_match('/.*\w+/', $text)) $fehler="Ihr Text ist fehlerhaft.";  
                >