txt arrays ersetzen und nicht überschreiben

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

  • #16
    Ich frage nach, weil es bei mir nicht funkioniert. Die Datei ist nach dem Vorgang leer...

    Kommentar


    • #17
      Original geschrieben von alexs
      Sähe das dann so aus?
      nein, jetzt hast du doch wieder das zurückschreiben ganz rausgelassen ...

      ich nehme an, du willst immer nur genau eine zeile in der datei haben?

      probiere mal folgendes:
      PHP-Code:
      if($_POST['new_username'] == "$new_username"){
      // datei zum lesen öffnen
      $file fopen("user.txt","r");
      // zeile einlesen
      $line=fgets($file,1024);
      fclose($file);
      // werte aufsplitten
      $arr explode("|",$line);
      // erstes array-element durch neuen usernamen ersetzen
      $arr[0] = $new_username;
      // array-werte wieder zu einer zeile zusammenfügen
      $neuer_inhalt implode("|",$arr);
      // datei zum schreiben öffnen
      $file fopen("user.txt","w");
      // neuen inhalt schreiben
      fwrite($file$neuer_inhalt);
      fclose($file);


      kurzform, ohne jegliche fehlerbehandlung,
      und unter der annahme, dass die bedingung
      if($_POST['new_username'] == "$new_username")
      richtig ist - obwohl ich da meine zweifel habe ... aber ob er in den if-zweig reingeht, kannst du ja selber prüfen ...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #18
        Dankeschön, für heute habe ich deine Zeit genug in Anspruch genommen, aber dafür auch wieder viel gelernt

        Kommentar


        • #19
          Kann mir jemand verraten, wie ich diesen Code übertragen kann, wenn mehere Zeilen vorhanden sind?

          Kommentar


          • #20
            Original geschrieben von alexs
            Kann mir jemand verraten, wie ich diesen Code übertragen kann, wenn mehere Zeilen vorhanden sind?
            na dann solltest du natürlich wieder zu schleifen greifen ...

            das einlesen kannst du dir mit file() etwas einfacher machen, das liefert dir ein array zurück, in dem für jede zeile ein eintrag existiert.
            mit explode machst du dir daraus dann am besten eine zweidimensionales array (schleife), führst deine änderungen durch, und erzeugst mit implode wieder ein ein-dimensionales array aus strings (wieder schleife).
            anschliessend schreibst du die einzelnen zeilen wieder in die datei, ebenfalls in einer schleife.


            oder, wenn du es dir etwas einfacher machen willst, schaust du dir serialize/unserialize an.
            damit kannst du komplette arrays in einen string verwandeln, auch mehrdimensionale.
            dann bräuchtest du nur noch deinen string aus der datei einlesen, in ein array wandeln, ersetzen - und dann das array wieder in einen string wandeln, und diesen wieder in die datei schreiben. das reduziert die zahl der schleifen natürlich - mit dem kleinen nachteil, dass das datenformat in der datei dann nicht mehr so "lesbar" für den menschlichen betrachter ist.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #21
              Alles was ich im Internet zu Zeidimensionalen Arrays gefunden habe ist folgendes:

              PHP-Code:
              //Zweidimensionalse Array
              <?php
              int zweiD 
              [][] = new int[3][2];

              //              Erste Spalte Zweite Spalte
              // Erste Zeile  zweiD[0][0]  zweiD[0][1]
              //Zweite Zeile  zweiD[1][0]  zweiD[1][1]
              //Dritte Zeile  zweiD[2][0]  zweiD[2][1]

              ?>
              Und mein Ansatz sieht nun folgender Maßen aus:

              PHP-Code:
              // datei zum lesen öffnen
              $file fopen("user.txt","r");

              // zeile einlesen
              $line=fgets($file,300);
              fclose($file);

              foreach(
              $lines as $line) {
                for(
              $i=0$icount($arr); $i++) {

                echo 
              "$arr[$i]";
              //Ausgabe: Username7363a0d0604902af7b70b271a0b96480NameNachnameEmail

                
              }
              }

              // werte aufsplitten
              $arr explode("|",$line);

              // erstes array-element durch neuen usernamen ersetzen
              $arr[0] = $new_username;

              // array-werte wieder zu einer zeile zusammenfügen
              $neuer_inhalt implode("|",$arr);

              // datei zum schreiben öffnen
              $file fopen("user.txt","w");

              // neuen inhalt schreiben
              fwrite($file$neuer_inhalt);
              fclose($file);

              Kommentar


              • #22
                PHP-Code:
                foreach($lines as $line) {
                  for(
                $i=0$icount($arr); $i++) {

                  echo 
                "$arr[$i]";
                //Ausgabe: Username7363a0d0604902af7b70b271a0b96480NameNachnameEmail
                  
                }

                wenn dein array $line heisst, muss es im foreach andersherum heissen: foreach($line as $lines)

                und warum verwendest du diese variable $lines dann nicht auch innerhalb der foreach-schleife?
                stattdessen sehe ich dich auf ein array $arr zugreifen - wo kommt das denn her, wird doch gar nicht definiert in deinem code?


                btw: wäre schön, wenn du deinem posting nicht nur den quelltext, sondern auch eine problembeschreibung beifügen könntest - und zwar eine, die ausführlicher ist, als beispielsweise "funzt nicht".
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #23
                  Ok, ich probiere es mal

                  Also, ich möchte mit "foreach($line as $xline)" und "for($i=0; $i< count($xline); $i++)" jede Zeile zählen, weil ich ja eine Datei mit mehrzeiligen Arrays habe. Dann möchte ich, wenn es in der Datei folgender Maßen aussieht

                  peter|dfc3b0c8e8cbba841c1c18c78931b192|der|die|das
                  alex|7363a0d0604902af7b70b271a0b96480|wer|wie|was

                  den Usernamen also $arr[0] auslesen und ersetzen.

                  Jedoch kann/weiß ich nicht, wie ich das deutlicher beschreiben kann

                  Kommentar


                  • #24
                    Bei der foreach Schleife kommt nun leider auch eine Fehlermeldung:

                    Warning: Invalid argument supplied for foreach() in /www/htdocs/.../user/edit_username.php on line 48

                    Kommentar


                    • #25
                      Das foreach Problem ist gelöst *freu*

                      Nun möchte ich mit $xline[$i][0] den ersten Wert des Arrays aufrufen, dass der User nach seinem Login verwendet, aber beim Schreiben wird die Datei wieder zu einer Zeile konvertiert.

                      PHP-Code:
                      if(is_array($file)) {
                        foreach(
                      $line as $xline) {
                          for(
                      $i=0$icount($xline); $i++) {

                          echo 
                      "$xline[$i][0]";

                          }
                        }

                      Hier nochmal mein jetziger Programmcode

                      PHP-Code:
                      if($_POST['new_username'] == "$new_username"){

                      // datei zum lesen öffnen
                      $file fopen("user.txt","r");

                      // zeile einlesen
                      $line=fgets($file,300);
                      fclose($file);

                      // überprüfen, ob datei array ist
                      if(is_array($file)) {

                      //jede zeile als $xline
                        
                      foreach($line as $xline) {
                      //zeilen zählen
                          
                      for($i=0$icount($xline); $i++) {
                      //$arr[0] von eingeloggtem user ausgeben
                          
                      echo "$xline[$i][0]";

                          }
                        }
                      }

                      // werte aufsplitten
                      $arr explode("|",$line);

                      // erstes array-element durch neuen usernamen ersetzen
                      $arr[0] = $new_username;

                      // array-werte wieder zu einer zeile zusammenfügen
                      $neuer_inhalt implode("|",$arr);

                      // datei zum schreiben öffnen
                      $file fopen("user.txt","w");

                      // neuen inhalt schreiben
                      fwrite($file$neuer_inhalt);
                      fclose($file);

                      Zuletzt geändert von alexs; 25.04.2004, 14:12.

                      Kommentar


                      • #26
                        Original geschrieben von alexs
                        PHP-Code:
                        // werte aufsplitten
                        $arr explode("|",$line); 
                        da du diesen schritt nach deiner foreach-schleife machst, beinhaltet $line auch nur den wert der letzten zeile - alle anderen hast du verworfen.


                        ohne jetzt streiten zu wollen:
                        ein bisschen mehr darüber nachzudenken, was du tust, könnte sicher nicht schaden.

                        es kann auch hilfreich sein, wenn du dir erst mal den nötigen ablauf auf einem blatt papier aufzeichnest/aufschreibst, ganz ohne PHP-befehle - und dann erst nachher diesen ablauf, wenn er logisch hinreichend durchdacht ist, in PHP umzusetzen versuchst.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #27
                          Jetzt bin ich wirklich fertig
                          Das ist jetzt alles was ich mir zusammen reimen konnte.
                          Der Username wird zwar zum newUsername, aber 1. wird er nicht in die Datei geschriebn und wenn er das würde, würde er in jeder Zeile den ersten Wert = newUsername setzen. Bitte, kann mir jemand einen Codeschnipsel oder so geben, ich bin echt depressive geworden. Ich versuche jetzt schon seit 11 Uhr morgens hier was zu Stande zu bringen.

                          PHP-Code:
                          if($_POST['new_username'] == "$new_username"){

                          // variablen
                          $file "user.txt";
                          $content file($file);
                          $lines count($content);

                          $rep_new "$new_username";

                          // zeilen zählen
                          for ($x=0;$x<$lines;$x++)
                              {
                              
                          $rep_old "$arr[0]";
                              
                          // inhalt ersetzen
                              
                          $content[$x] = str_replace("$rep_old","$rep_new",$content[$x]);
                              
                          // Kontrollausgabe, ob str_replace funzte
                              
                          echo " '<b>$arr[0]</b>'($x) -->  '<b>$new_username</b>' Array: $content[$x]";
                              echo 
                          "<br>";
                              }

                          // datei zum schreiben öffnen
                          $fp fopen($file,"w");
                          for(
                          $i=0;$i<$lines;$i++)
                              {
                              
                          // neuen Inhalt bestimmen
                              
                          $write[$i]=trim($content[$i]);
                              
                          // endlich schreiben verdammt
                              
                          fwrite($fp,$write[$i],300);
                              }
                          fclose($fp);

                          echo
                          "<br><br>";
                          // wie viele arrays gibt es in der txt datei?
                          echo "Arrays: $lines";

                          Zuletzt geändert von alexs; 25.04.2004, 16:58.

                          Kommentar


                          • #28
                            Also meine Codeversion aus dem vorigen Beitrag funktioniert einfach nicht..., ich meine: es wird nicht in die Textdatei geschrieben. Hat jemand eine Antwort für mich parat?

                            Kommentar


                            • #29
                              hast du dir mal vor dem schreiben mit print_r() ausgeben lassen, was in deinem array $content drin steht?
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar


                              • #30
                                Ja, habe ich...


                                Original geschrieben von alexs
                                PHP-Code:
                                // Kontrollausgabe, ob str_replace funzte
                                    
                                echo " '<b>$arr[0]</b>'($x) -->  '<b>$new_username</b>' Array: $content[$x]";
                                    echo 
                                "<br>";
                                    } 

                                Kommentar

                                Lädt...
                                X