Beliebige Zeilen aus Textdatei löschen

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

  • #16
    Das sieht schon sehr gut aus.

    Vielleicht noch eine Überlegung: Brauchst du die ID?

    a) Ja, du möchtest den "gezielt" den Eintrag mit der ID 5 löschen. Das bedeutet, du musst alle Zeilen mittels Schleife durchlaufen und jeweils prüfen ob die ID == 5 ist

    b) Nein, du möchtest "blind" den 3. Eintrag löschen. Das bedeutet, dass du einfach ein unset($array[2]) ausführen kannst. Wenn zwei User gleichzeitig daran Arbeiten, kann das zu Problemen führen. (warum sollte klar sein)

    EDIT:
    Ach so, wenn du eine Entscheidung für a) oder b) getroffen hast, steht auch schon das weitere vorgehen fest...

    Kommentar


    • #17
      Ähm... nur auf Eintrag 5 bezogen? Ich mein.. ist das jetzt nur ein Beispiel für die fünfte Zeile? Dann "Ja". Möglichkeit B ist das was ich vor hatte richtig? Wenn 2 daran arbeiten kann das unter Umständen nicht funktionieren, meinst du das? Aber der Zufall wäre schon ziemlich gering denke ich.

      Diese editiererei xD Ich muss erstmal verstehen bevor ich antworte
      Zuletzt geändert von dolbyfreak; 21.11.2010, 04:03.

      Kommentar


      • #18
        Ähm... nur auf Eintrag 5 bezogen? Ich mein.. ist das jetzt nur ein Beispiel für die fünfte Zeile? Dann "Ja".
        Nein, es gilt natürlich auch für 1,2,3,4,5,6,7,8.... Du denkst definitiv nicht wie ein Programmierer!

        Möglichkeit B ist das was ich vor hatte richtig?
        Ähm, Jaein, ich glaub du wolltest beides, oder ne Mischform, oder so.

        Wenn 2 daran arbeiten kann das unter Umständen nicht funktionieren, meinst du das?
        Ja, das war fast 1:1 mein Wortlaut! Hast du verstanden, warum??? Sonst hast du nichts gelernt...

        Aber der Zufall wäre schon ziemlich gering denke ich.
        Du hast die falsche Denkweise! Schon allein die Tatsache, dass du diesen Fall nicht ausschließt, sollte dich davon abbringen Lösung b zu wählen. Zumal daten die gelöscht sind wirklich weg sind und nicht wiederhergestellt werden können in dem System. Zumindest bei so banalen Dingen kostet es eigentlich keinen Mehraufwand etwas langfristig zu denken. Höchstens Hirnschmalz.

        Kommentar


        • #19
          Jaaaa.. wie ein Programmierer xD ich stelle mich nicht wirklich als Programmierer hin. Ich habe zwar die Grundkenntnisse verstanden, aber bei komplexen Codes wenn diese noch Befehle enthalten die ich nicht kenne, komme ich ins schleudern. Das habe ich aber schon verstanden das es für 1 bis x Einträge gilt. Man missversteht sich ziemlich schnell^^

          Ich würde es gern so lernen, dass es von Anfang an her sinnvoll ist. Wenn 2 daran arbeiten ist es bestimmt wie ein "exit;"-ähnlich oder? Also dann bricht der Code ab, wird überschnitten durch die andere User-Anfrage nehm ich an. Ich will natürlich den sicheren Weg gehen ganz klar

          Soll ich die Datei mit einer for-Schleife durchlaufen? Wie soll ich dann den Wahrheits-Wert heraufinden ob die ID 5 ist?

          Stelle mir das gerade irgendwie so vor:

          PHP-Code:
          if(isset($_GET["id"] == ?)) 
          Oder ich kann natürlich auch das Suchergebnis gleich von der for-Schleife mit unset(); killen stimmts?
          Zuletzt geändert von dolbyfreak; 21.11.2010, 04:32.

          Kommentar


          • #20
            Das habe ich aber schon verstanden das es für 1 bis x Einträge gilt.
            Das schien mir aber ganz und gar nicht so.
            Also dann bricht der Code ab, wird überschnitten durch die andere User-Anfrage nehm ich an.
            Nein!

            Vorher:
            0 Apfel
            1 Birne
            2 Auto
            3 Hund
            User 1 löscht Nr. 2:
            0 Apfel
            1 Auto
            2 Hund
            User 2 löscht ebenfalls Nr. 2:
            0 Apfel
            1 Hund
            Auto ist also unwiderruflich gelöscht, obwohl User 2 ebenfalls Birne löschen wollte.

            Soll ich die Datei mit einer for-Schleife durchlaufen?
            Ja!
            Wie soll ich dann den Wahrheits-Wert heraufinden ob die ID 5 ist?
            Wir bewegen uns immer noch bei den Grundlagen. Jetzt setz' erstmal die Schleife auf und gucke dir an, welche Informationen du bei jedem Schleifendurchlauf zur Verfügung hast. Es sollte ein leichtes sein, den Vergleich aufzusetzen.
            Zuletzt geändert von TobiaZ; 21.11.2010, 04:35.

            Kommentar


            • #21
              arg! Das versteh ich mit dem Beispiel nicht... warum ist "auto" nach dem löschen auf Platz 1 vorhanden, wenn doch "user 1" Platz 2 gelöscht hat !??

              Wie soll denn die Bedingung der for-Schleife aussehen? Soll ich dafür sizeof(); verwenden?

              Kommentar


              • #22
                Nr. 2 heißt das zweite Element. Wie du aber weißt, fängt man in Arrays bei 0 an zu zählen, was auch in dem Beispiel so ist.

                Beide User haben also zu beginn der Story die volle Liste mit löschlinks vor sich. Beide wollen das zweite Element "Birne" löschen und klicken unmittelbar nacheinander auf den entsprechenden Löschlink (lösche 2. Eintrag).
                User1 löscht also wie gewollt die Birne. Daraufhin rutschen die anderen Elemente logischerweise nach. Es gibt in diesem Szenario ja keine IDs. Also löscht der 2.User das Auto.

                Jetzt nachvollziehbar, wo das Problem liegt?

                sizeof (übrigens nur ein alias für count) gibt doch nur die Anzahl der Elemente zurück. Angenommen du möchtest das X. Element löschen, oder von mir aus auch das Element mit der ID Y. Welche Rolle spielt dabei die Anzahl der Elemente Z??? Es ist doch egal, ob 1,2 oder 100 Elemente drin sind.

                Kommentar


                • #23
                  ja, jetzt verstehe ich das... so möchte ich das ja nicht haben. Ich möchte über die ID die Zeilen entfernen. Mit sizeof hat es auch nicht funktioniert.. steh grad aufm Schlauch wie ich die for-Schleife definieren soll. Ich muss doch die Anzahl der Zeilen bestimmen um die Schleife zu durchlaufen oder? Und zwar so lange bis die jeweilige ID gefunden ist!? Ich habs iwie so versucht:
                  PHP-Code:
                   for($x=$id$x <= sizeof($datei); $x++) 
                  Aber das funzt auch nicht weil wenn die ID 5 wäre und sizeof ist 10 dann würde er ja alle weiteren 5 Zeilen auch ausgeben.. ich probiere mal weiter...^^ ach ja, das explode("|",$datei); muss auch noch rein stimmts? Um alles zu trennen..
                  Zuletzt geändert von dolbyfreak; 21.11.2010, 05:33.

                  Kommentar


                  • #24
                    Wieso definierst du $x=$id? Der Laufindex und die ID des Datensatzes haben nichts - aber auch gar nichts(!) - miteinander zu tun.

                    Du musst über ALLE Elemente des Array iterieren.

                    Und in der Schleife sollst du dir dann - wie gesagt(!) - mal ansehen, welche Informationen du hast, um dann abzufragen ob die betreffende Zeile gelöscht werden soll, oder nicht.

                    Vielleicht ist es Zeit fürs Bett? Ich kaue hier gerade absolute Basics vor.

                    EDIT:
                    ach ja, das explode("|",$datei); muss auch noch rein stimmts? Um alles zu trennen..
                    Ja, das ist ein guter ansatz um zu prüfen ob die aktuelle id == der zu löschenden id ist. Nur dass du das natürlich nicht auf das Array $datei anwendest, sondern auf den String, der die aktuelle Zeile enthält.

                    Kommentar


                    • #25
                      Bis hier hin.. weiter weiß ich echt net weiter ^^ Ich kann zwar mit den IDs die jeweilige Zeile ansprechen, aber mit file_put_contents wird das nichts hab ich so das Gefühl, da mir der Befehl alles löscht. Mit array_splice konnte ich wenigstens noch die Zeile bestimmen.. aber jetzt!? Vielleicht noch eine for-Schleife fürs eintragen in die Datei mit einem Tauschbefehl in der Bedingung? Könnte das klappen?

                      PHP-Code:
                      <?php
                      $id 
                      $_GET["id"];
                      $id--;

                      $datei file("../textdata/thema.txt");

                      for (
                      $x=0$x count($datei[1]); $x++) {
                      $array explode("|",$datei[$id]);
                      unset (
                      $array);
                      file_put_contents("../textdata/thema.txt",$datei);
                      }

                      ?>
                      Zuletzt geändert von dolbyfreak; 21.11.2010, 06:46.

                      Kommentar


                      • #26
                        du musst alle Zeilen mittels Schleife durchlaufen und jeweils prüfen ob die ID == 5 ist
                        Jetzt funktioniert es ja die Zeile auszuwählen. Und mit unset[$array]; lösche ich auch die gewünschte, die ich vorher durch die die Schleife und mit Hilfe von explode(); definiert habe. Aber jetzt hab ich das Problem, dass die Textdatei komplett geleert wird. Durch das:

                        PHP-Code:
                        file_put_contents("../textdata/thema.txt",$datei); 
                        sehe ich auch warum. Da wird doch die thema.txt komplett geladen und mit dem unset-Befehl überschrieben. Sollte ich mir jetzt Alternativen zu file_put_contents() überlegen? Oder ist das in irgendeiner Weise doch möglich?

                        Weil vorher hab ich die einzelne Zeile ja mit array_splice(); definieren können... ach mensch, ich würd das so gerne mal gelöst ham^^

                        Tobias... ich danke dir, dass du dich bis hier her mit mir rumgequält hast

                        LG

                        Kommentar


                        • #27
                          Quatsch! $datei ist ein Array, das hast du schon bemerkt. zu file_put_contents(), da steht sicher nichts von einem Array. Das müsste dir ein korrekt eingestelltes Error-reporting auch mitgeteilt haben?!

                          Weil vorher hab ich die einzelne Zeile ja mit array_splice(); definieren können... ach mensch, ich würd das so gerne mal gelöst ham^^
                          Dann versuch den Code, den du schreibst nachzuvollziehen und nicht irgendwelche Funktionen aneinander zu reihen. Das hat nichts mit Programmieren zu tun.

                          Kommentar


                          • #28
                            ?????

                            Wo liegt das Problem?

                            PHP-Code:
                            <?php 
                            $id 
                            $_GET["id"]; 
                            $id--; 

                            $datei file("../textdata/thema.txt"); 

                            for (
                            $x=0$x count($datei[1]); $x++) { 
                            $array explode("|",$datei[$id]); 
                            print_r ($array); 

                            // file_put_contents("../textdata/thema.txt",$datei); 


                            // header("location: ../index.php?act=del");

                            ?>
                            In dem Arrray $array, welches ich mit print_r(); ausgeben lasse befindet sich der Inhalt der ausgewählten Zeile, die ich über die for-Schleife und dem explode() definiert habe. Diese Zeile ändert sich sobald ich auch die ID ändere in das jeweilige Array um.

                            Beispiel:

                            HTML-Code:
                            http://localhost/meinordner/phpdata/link_entf.php?id=1
                            http://localhost/meinordner/phpdata/link_entf.php?id=2
                            http://localhost/meinordner/phpdata/link_entf.php?id=3
                            Beim Abschicken erzeugt das:

                            HTML-Code:
                            Array ( [0] => 1 [1] => Linkname 1 [2] => URL 1 )
                            Array ( [0] => 2 [1] => Linkname 2 [2] => URL 2 )
                            Array ( [0] => 3 [1] => Linkname 3 [2] => URL 3 )


                            Klar soweit? Komm mir langsam bescheuert vor hier Ich will mich nicht ärgern, ich möchte gern eine Lösung haben. Hier wird man nur schlecht gemacht, weil man evtl. falsch formuliert hat. Ich hab schon verstanden was da passiert... bis auf diese Sache zum Schluss mit:

                            PHP-Code:
                            file_put_contents("../textdata/thema.txt",$datei); 
                            Ich würde mich freuen, wenn wir das ganze mal sachlich und mir gegenüber verständlich ausdrücken könnten. Das versteht doch keine Sau, die sich nicht auf Eurem Niveu befindet. Schraub deines mal runter damit ich verstehe was los ist... der Code, so wie ich Ihn da oben geschrieben habe funktioniert, da gibts keine Fehlermeldung vom Server zurück! Sorry, das ich jetzt so frech werde, aber ich habe keine Lust mich ständig zu rechtfertigen.

                            Vorher habe ich versucht das ganze mit array_splice(); zu lösen:

                            PHP-Code:
                            $nr sizeof(file("../textdata/thema.txt"));
                            $nr--;
                            $array file("../textdata/thema.txt");
                            array_splice($array,$nr,1);
                            file_put_contents("../textdata/thema.txt",$array); 
                            EDIT: Das hat nicht richtig hingehauen... bzw. war das eine unsinnige Lösung. Da ich dafür Sorgen musste von oben mit (offset) zu löschen und von unten (Length) mit negativer Zahl.

                            Ich hab das Gefühl mit jedem meiner Einträge hier stoße ich eine neue Agression an^^ Darüber hinweg zu sehen und in kleinen Schritten zu erklären wo das Problem liegt wäre viel hilfreicher. Ich bin auf keinen Fall auf Eurem Niveu Leute! Also bitte respektiert das mal, sonst sehe ich auch bald Pferde kotzen
                            Zuletzt geändert von dolbyfreak; 21.11.2010, 18:24.

                            Kommentar


                            • #29
                              ich korrigiere mich, file_put_contents erlaubt natürlich Arrays. Nur bringt es nichts, wenn du unveränderte Daten wieder zurück in die Datei schreibst. (Ich beziehe mich auf deine Postings von 05:39 und 16:54, der letzte erscheint mir etwas zusammenhangslos.)

                              Um dich nicht weiter zu verärgern, klinke ich mich hier aus. Vielleicht hast du in der Zwischenzeit etwas Gelegenheit dich weiter in die Materie einzulesen oder deinen Code noch mal Stück für Stück durchzugehen.

                              Kommentar


                              • #30
                                Ich finde beiden Postings gerade nicht.. ein Permalink wäre hilfreich Verdammt.. ich habe die Variable nicht geändert bei diesem Posting hier

                                http://www.php-resource.de/forum/php...tml#post648313

                                Aus dem Grund verstehe ich warum das Programm unverändert in die Datei schreibt, fehler meinerseits. Der Eintrag sollte natürlich so lauten:

                                PHP-Code:
                                file_put_contents("../textdata/thema.txt",$array); 
                                Nur warum klappt das denn nicht? Warum leert er mir nach Ausführung die Datei? Wie kann ich die Zeile mit fpc so verändern, dass er es richtig ausführt?

                                @TobiaZ: Ich will dich nicht vertreiben.. es ist nur so, dass wir uns beide irgendwie missverstehen durch diesen großen Wissens-Unterschied (nehm ich mal an).

                                Kommentar

                                Lädt...
                                X