a oder r oder r+

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • a oder r oder r+

    Ich hab nen Problem:

    Ich hab nen Eingabe Formular geschrieben (mein erster PHP script )

    Der funktioniert auch soweit, was ich schade finde dass neue Beiträge am ende der Datei, also einer Textdatei geschwieben werden, praktisch gesagt diese werden angehängt. kann man das so machen dass die bestehende beiträge in der Textdatei nach unten verschoben werden und die neusten nach oben kommen
    ----------------------------------------------------------
    SCRIPT DER SCHREIBT:

    <?

    if(isset($Rasse) )
    {
    $date = date("H:i-D-j-M-Y");
    $fp = fopen("data.txt","a");
    $ip = getenv("REMOTE_ADDR");
    fwrite($fp ,"Ihre Ip-Adresse:". ($ip)." <br> \n");
    fwrite($fp,"Eintragsdatum:".($date)." <br> \n");
    fwrite($fp,"Rasse:". ($Rasse)." <br> \n");
    fwrite($fp,"Alter:". ($Alter)." <br> \n");
    fwrite($fp,"PLZ\Ort:". ($ort)." <br> \n");
    fwrite($fp,"Telefon:". ($telefon)." <br> \n");
    fwrite($fp,"Email: <a href='mailto:".$email."'>".$email."</a> <br> <hr> <br>\n");

    fclose($fp);
    }

    ?>

    ----------------------------------------------------------
    SCRIPT DER LIEST UND AUSGIBT:

    <? readFile("data.txt") ?>
    ----------------------------------------------------------
    Also wie gesagt die neuste Beiträge werden am ende der Seite ausgegeben.

    Gibt es ne Lösung?

  • #2
    Funktioniert nzr mit einem Trick:
    1. File lesen und vorhandene Inhalte in einen Array schreiben
    2. File öffnen mit open output, so daß der Cursor am Beginn steht, und den neuen Inhalt reinschreiben
    3. Im Anschluß daran die zuvor im Array gesicherten Inhalte reinschreiben.

    Code:
    <?php
    $datei = "data.txt";
    @$fp = fopen($datei,"r"); // File zum Lesen öffnen 
    if (!$fp) {
        print "File $datei doesn't exist<br>\n";
    } else {
        $fileok = "ok";
        while (!feof($fp)) { 
            $zeile[] = fgets($fp, 4096); // File zeilenweise in einen Array einlesen
        }
    }
    @fclose($fp);
    if ($fileok == "ok") {
        $fp = fopen($datei,"w"); // File zum Schreiben öffnen
    	
    	// Hier Deine neuen Zeilen reinschreiben
    	 
        for ($i=0;$i<sizeof($zeilen);$i++) {  // Rest reinschreiben
            fputs($fp, $zeile[$i]);
        }
        fclose($fp);    
    }
    ?>

    Kommentar


    • #3
      Hi!
      Naja, die Sachen in der Datei nach unten schieben etc. is zuviel Aufwand und overhead.

      Verwende eine Datenbank ;-)

      Mit den Files kannst folgendes machen.
      Du kannst einen separator mit in die Datei schreiben
      Z.B.
      <STARTSIG>
      daten blabla [...]
      <STOPSIG>

      Dann liest das script immer von <STARTSIG> bis <ENDSIG> die daten aus in einer weil schleife und pusht dieses in ein Array.
      z.b.
      while(blabla) {
      Lies daten solange das Dateiende noch nicht erreicht
      while(blublu) {
      Lies Signaturblock
      Block in array pushen
      }
      }

      Dann kannst du das Array nach dem Datum sortieren.
      Entweder du machst ein hash-array mit dem datum als key(leichter zu sortieren).
      oder du machst den Signaturblock auch als array.
      Aber dann hast du ein 2-Dimensionales Array:
      also
      data[0][0] -> die erste index ist der einrag und der zweite die zeilen des eintrages

      Um dies zu sortieren musst aber eine etwas kompliziertere Sortierfunktion schreiben. Aber das ist auch alles.

      Also Datenbank ist hierzu prädestiniert :-)

      Noch was zu hand´s vorschlag:
      while (!feof($fp)) {
      $zeile[] = fgets($fp, 4096); // File zeilenweise in einen Array einlesen
      }
      Code:
      $zeile = file($datei); macht dasselbe


      Grüsse

      [Editiert von iQD am 27-01-2002 um 21:59]
      FreeBSD - Unleash the daemon inside your PC

      Kommentar


      • #4
        Also Danke dir Hand!!! Hast viel geschrieben, bloss du muss auch verstehen, dass ich mich mit PHP erst seit 4 Tagen beschäftige und das ist fast wie chinesisch für mich also, wenn es dir nichts ausmacht kannst du das mit meinem script verbinden, damit ich endlich begreife wo das reinkommt?

        Danke für die Mühe

        MFG Archie

        Kommentar


        • #5
          Also den script von Hand hab ich ausprobiert und anstaat <? readFile("data.txt") ?> eingesetzt (lacht mich ruhig aus gg)

          Das ging leider nicht

          Kommentar


          • #6
            to hand

            wiso soll das denn mit r+ nicht gehen ???

            ich schnall das nicht hab da so ein kluges buch das sagt

            r+ öffnet die datei zum lesen und schreiben und setzt den dateizeiger auf den anfang(das erste zeichen in der datei)

            also nach meiner logik müsste das doch so gehen oder denke ich da falsch ?????

            greets blume
            für wallpaper: blumenbeet.com

            Kommentar


            • #7
              Also mein Buch sagt das gleiche und nach meiner Logik sollte das gehen, das geht aber net

              Kommentar


              • #8
                Code:
                <?php
                if(isset($Rasse)) { 
                	$date = date("H:i-D-j-M-Y"); 
                	$fp = fopen("data.txt","a"); 
                	$ip = getenv("REMOTE_ADDR"); 
                	$datei = "data.txt";
                	@$fp = fopen($datei,"r"); // File zum Lesen öffnen 
                	if (!$fp) {
                	    print "File $datei doesn't exist<br>\n";
                	} else {
                	    $fileok = "ok";
                	    while (!feof($fp)) { 
                	        $zeile[] = fgets($fp, 4096); // File zeilenweise in einen Array einlesen
                	    }
                	}
                	@fclose($fp);
                	if ($fileok == "ok") {
                	    $fp = fopen($datei,"w"); // File zum Schreiben öffnen
                	
                	    fputs($fp ,"Ihre Ip-Adresse:".($ip)."<br>\n"); 
                	    fputs($fp,"Eintragsdatum:".($date)."<br>\n"); 
                	    fputs($fp,"Rasse:". ($Rasse)."<br>\n"); 
                	    fputs($fp,"Alter:". ($Alter)."<br>\n"); 
                	    fputs($fp,"PLZ\Ort:". ($ort)."<br>\n"); 
                	    fputs($fp,"Telefon:". ($telefon)."<br>\n"); 
                	    fputs($fp,"Email: <a href='mailto:".$email."'>".$email."</a><br><hr><br>\n"); 
                	 
                	    for ($i=0;$i<sizeof($zeile);$i++) {  // Rest reinschreiben
                	        fputs($fp, $zeile[$i]);
                	    }         		
                	    fclose($fp);    
                }
                Wie kann ich in einer Datei eine Zeile einfügen oder löschen? Siehe dazu:
                http://www.koehntopp.de/php/open_exe...atei-einfuegen

                Da ist zu lesen:
                Für dieses Problem gibt es keine elegante oder effiziente Lösung. Die Ursache liegt darin, wie Unix und Windows die unterliegenden Dateien handhaben, nämlich als unstrukturierte Byteströme. Für diese Byteströme gibt es keine Indices und auch keine Methoden, mit denen man effizient beliebige Teile der Datei löschen oder in die Datei einfügen könnte.

                Tatsächlich ist der Wunsch nach einfachen Einfüge- und Löschoperationen der Auslöser für die Schaffung von Datenbankfunktionen wie die DBM-Funktionen oder von ganzen Datenbanken wie MySQL gewesen. Wenn man auf diese Sorte Problem trifft, sollte man also intensiv über den Einsatz von DBM-Dateien oder Datenbanken nachdenken.

                Um in einer Datei eine Zeile einzufügen oder zu löschen, muß man die Datei öffnen und zeilenweise durchlesen und in eine zweite Datei schreiben. Erreicht man die gewünschte Position, muß man dort eine Zeile einfügen oder löschen. Nach Abschluß der Operation ist die Originaldatei zu löschen und die neue Datei umzubenennen. Dabei ist zu beachten, daß in einer Webumgebung ohne weiteres mehrere Benutzer zugleich eine solche Operation für dieselbe Datei anfordern können. Man muß also auch durch Locking dafür Sorge tragen, daß sich diese Benutzer nicht in die Quere kommen.

                Kommentar


                • #9
                  Hmm geht leider net ich bekomme eine Fehlermeldung:
                  Parse Error on line ...

                  Kommentar


                  • #10
                    Bitte sei so lieb und sag mir in welcher Zeile der Parse Error kommt.

                    Solche Skripte kann man nicht einfach so testen. Man schreibt sie hier in die Texteingabe.

                    Kommentar


                    • #11
                      Vielleicht wenn Du den Block gegen das hier austauscht:

                      fputs($fp,"Ihre Ip-Adresse: $ip<br>\n");
                      fputs($fp,"Eintragsdatum: $date<br>\n");
                      fputs($fp,"Rasse: $Rasse<br>\n");
                      fputs($fp,"Alter: $Alter<br>\n");
                      fputs($fp,"PLZ\Ort: $ort)<br>\n");
                      fputs($fp,"Telefon: $telefon)<br>\n");
                      fputs($fp,"Email: <a href='mailto:$email'>$email</a><br><hr><br>\n");

                      Kommentar


                      • #12

                        Zeile 199 komischerweise steht in dieser Zeite </html>
                        Was kann daran falsch sein?
                        http://www.deck-kater.de/cw/eintr.php

                        Kommentar


                        • #13
                          Dann machst davor ein "?>"

                          ?></html>

                          Kommentar


                          • #14
                            Ne kann net sein, da ich PHP CODE von HTML getrennt habe, hab praktisch die PHP scripts mit "<? ?> abgetrennt

                            Also hab die Datei hochgeupt falls du es brauchst
                            http://www.deck-kater.de/cw/eintrag.zip

                            [Editiert von archie am 28-01-2002 um 18:20]

                            Kommentar


                            • #15
                              } nach dem fclose() vergessen

                              Code:
                              <?php
                              if(isset($Rasse)) { 
                              	$date = date("H:i-D-j-M-Y"); 
                              	$fp = fopen("data.txt","a"); 
                              	$ip = getenv("REMOTE_ADDR"); 
                              	$datei = "data.txt";
                              	@$fp = fopen($datei,"r"); // File zum Lesen öffnen 
                              	if (!$fp) {
                              	    print "File $datei doesn't exist<br>\n";
                              	} else {
                              	    $fileok = "ok";
                              	    while (!feof($fp)) { 
                              	        $zeile[] = fgets($fp, 4096); // File zeilenweise in einen Array einlesen
                              	    }
                              	}
                              	@fclose($fp);
                              	if ($fileok == "ok") {
                              	    $fp = fopen($datei,"w"); // File zum Schreiben öffnen
                              	
                              	    fputs($fp ,"Ihre Ip-Adresse: $ip<br>\n"); 
                              	    fputs($fp,"Eintragsdatum: $date<br>\n"); 
                              	    fputs($fp,"Rasse: $Rasse<br>\n"); 
                              	    fputs($fp,"Alter: $Alter)<br>\n"); 
                              	    fputs($fp,"PLZ\Ort: $ort<br>\n"); 
                              	    fputs($fp,"Telefon: $telefon<br>\n"); 
                              	    fputs($fp,"Email: <a href='mailto:$email'>$email</a><br><hr><br>\n"); 
                              	 
                              	    for ($i=0;$i<sizeof($zeile);$i++) {  // Rest reinschreiben
                              	        fputs($fp, $zeile[$i]);
                              	    }         		
                              	    fclose($fp);
                              	}    
                              }
                              ?>
                              
                              Schaut gut aus! Gartuliere

                              Kommentar

                              Lädt...
                              X