Zeile einer Textdatei ändern

Es tut mir wirklich leid hier mit einem wahrscheinlich sehr banalen Thema anfangen zu müssen. Aber ich finde einfach keine Lösung für mein Problem.

Also .. ich habe eine Textdatei mit Daten einer LAN-Spielemeinschaft und die
einzelnen Werte bedeuten IP-Adresse, NickName und Beitrag bezahlt.

Inhalt der Textdatei:
-------------------------------
192.168.1.1;Bernd;ja
192.168.1.2;Freddy;nein
192.168.1.3;Tina;ja
etc. ...

So .. nun möchte ich durch Anklicken einer Grafik den Bezahlt status von "Ja" auf "Nein" oder umgekehrt umstellen können.

Mein Problem hierbei ist, wie lege ich fest, dass sich die Textdatei nur an dieser einen Stelle (also zB. in Zeile 2 an der "Beitrag bezahlt" Stelle) ändert - und die Textdatei mit dem neuen Inhalt gespeichert wird ?!

Ich versuch hier schon seit Tagen was hinzubekommen ... aber irgendwie wills einfach net klappen.

(Bei Datenbanken ist es kein Problem - aber ich muss hierbei mit Textdateien arbeiten.)

Könnt Ihr mir evtl. mit einem Tipp weiterhelfen ?! Oder gibts hier im Forum irgendwo bereits eine Lösung des Problems die ich einfach nicht gefunden habe ?!

Vielen Dank !
 
Ich versuch hier schon seit Tagen was hinzubekommen ... aber irgendwie wills einfach net klappen.
Zeig doch mal den Code her, den du schon hast, dann können wir dir sagen, woran’s hapert. So lernst du viel eher was, als wenn dir hier einfach einer den Code hinwirft.
 
Hierbei wird meine Datei ausgelesen, danach trennt er die einzelnen Zeilen nach dem Separator ";" in einzelne Fragmente und gibt mir diese in einer formatierten Tabelle aus.

Als letztes Tabellenfeld ist in jeder Spalte eine Grafik, die beim Anklicken die Parameterwerte des jeweiligen Users per POST übergibt ... so .. und ab da fehlt mir der
sinnvolle Ansatz diese Daten weiter zu "handeln" und die Textdatei so zu manipulieren, dass sie die neuen Daten enthält ...

Kann sein, dass das alles bissi umständlich ist wie ich es mache - aber mein PHP-Kenntnisstand ist einfach noch nicht weiter. :-(

PHP:
      # Datei wird definiert und geoeffnet
      $datei="../txt/ip_liste.txt";
      $inhalt = file($datei);
      # jede zeile durchlaufen 
      foreach ($inhalt as $zeile) 
         { 
         $eintrag[] = explode(";", $zeile); 
         } 
      echo"<tr>";
      echo"<td width=\"50\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"><b>No.</b></td>";      
      echo"<td width=\"150\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"><b>Nick-Name</b></td>";
      echo"<td width=\"150\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"><b>Real-Name</b></td>";
      echo"<td width=\"100\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"><b>IP-Adresse</b></td>";
      echo"<td width=\"50\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"><b>Bezahlt</b></td>"; 
      echo"<td width=\"50\" height=\"16\" class=\"text_tabelle\" bgcolor=\"#fb842d\"></td>";            
      echo"</tr>"; 
      // ausgabe 
      $zaehler=0;
      foreach ($eintrag as $e) 
          { 
          $ip_adresse=$e[1];
          $nick_name=$e[0];
          $real_vorname=$e[2];
          $real_nachname=$e[3];
          $bezahlt=$e[4];          
          $zaehler=$zaehler+1;
          if ($bezahlt=='ja')
              $bezahlt_neu="nein";
          ELSE
              $bezahlt_neu="ja";
          echo "<tr>";
          echo "<td class=\"text_tabelle\">$zaehler</td>";
          echo "<td class=\"text_tabelle\">$nick_name</td>";
          echo "<td class=\"text_tabelle\">$real_vorname&nbsp;$real_nachname</td>";
          echo "<td class=\"text_tabelle\">$ip_adresse</td>";
          echo "<td class=\"text_tabelle\">$bezahlt</td>"; 
          echo "<td class=\"text_tabelle\">";
                 echo "<form action='mitglieder.php' method='post' target='_self'>";
                 echo "<input type='hidden' name='zaehler' value='$zaehler'>";
                 echo "<input type='hidden' name='nick_name' value='$nick_name'>";   
                 echo "<input type='hidden' name='real_vorname' value='$real_vorname'>"; 
                 echo "<input type='hidden' name='real_nachname' value='$real_nachname'>";                   
                 echo "<input type='hidden' name='ip_adresse' value='$ip_adresse'>"; 
                 echo "<input type='hidden' name='bezahlt' value='$bezahlt_neu'>";  
                 echo "<input type='hidden' name='passwort' value='$key'>";                  
                 echo "<input type='hidden' name='status_aendern' value='ja'>";                                 
                 echo "<input type='image' value='löschen' src='../graphics/edit.gif'>";
                 echo "</form>"; 
           echo"</td>";                  
           echo "</tr>";
           }
 
Also .. ich übergebe also mit der Schaltfläche (über ein Formular) die spezifischen Daten
der zu ändernden Zeile.

Wurde eine Variable gesetzt, die ein Ändern des Bezahlt-Status anzeigt, so
durchlaufe ich nun folgende Schleife:

PHP:
      if ((isset($_REQUEST['status_aendern'])) AND (($_REQUEST['status_aendern'])=="ja"))  
           {
           $zaehler=$_POST['zaehler'];              # Zeile der Textdatei die geaendert werden soll 
           $nick_name=$_POST['nick_name'];          # Nachfolgend die einzelnen Werte der Zeile
           $real_vorname=$_POST['real_vorname'];
           $real_nachname=$_POST['real_nachname'];       
           $ip_adresse=$_POST['ip_adresse']; 
           $bezahlt=$_POST['bezahlt'];            
           if ($bezahlt=='ja')                      # Neuer Bezahlt-Status
               $bezahlt_neu="nein";
           ELSE
              $bezahlt_neu="ja";

So .. und das wars auch schon ...

Jetzt habe ich im Prinzip alle Variablen-Inhalte der Zeile vorliegen - und auch die Zeilennummer .... aber was nun ?!

Wie schreibe ich nun den neuen Inhalt dieser Zeile über den Inhalt in der Datei ?!
 
Ich würde es mal mit [phpf]file[/phpf] probieren, dann kannst du mit $_POST['zaehler'], wenn ich das richtig sehe, direkt auf die zu ändernde Zeile zugreifen.
 
Habs jetzt wie folgt gelöst:

PHP:
      if ((isset($_REQUEST['status_aendern'])) AND (($_REQUEST['status_aendern'])=="ja"))  
           {
           $zaehler=$_POST['zaehler']-1;              # Zeile der Textdatei die geaendert werden soll 
           $nick_name=$_POST['nick_name'];          # Nachfolgend die einzelnen Werte der Zeile
           $real_vorname=$_POST['real_vorname'];
           $real_nachname=$_POST['real_nachname'];       
           $ip_adresse=$_POST['ip_adresse']; 
           $bezahlt=$_POST['bezahlt'];   
           $anwesend=$_POST['anwesend'];         
           if ($bezahlt=='ja')                      # Neuer Bezahlt-Status
               $bezahlt_neu="nein";
           ELSE
               $bezahlt_neu="ja";               
           // Die neue Zeile wird erstellt
           $neue_zeile[] = "$nick_name;$ip_adresse;$real_vorname;$real_nachname;$bezahlt_neu;$anwesend\r\n";
           // Die Datei wird ausgelesen und in einem Array gespeichert
           $datei="../txt/ip_liste.txt";
           $inhalt = file($datei);
           // Anzahl der Zeilen wird ausgelesen
           $num=sizeof($inhalt);
           // Wenn die Schleife die zu aendernde Zeile erreicht, wird diese im Array gegen den neuen Inhalt ausgetauscht
           for ($i=0; $i<$num; $i++)
                  {
                  if($i==$zaehler)
                          {
                          $inhalt[$zaehler] = $neue_zeile[0];
                          }
           // Textdatei zum Überschreiben öffnen und schreiben
           $fp = fopen("$datei","w"); 
           fwrite($fp,implode($inhalt));
           fclose($fp);            
           }
           }
 
Zuletzt bearbeitet:
Zurück