Text Datei auslesen und per PHP ändern

Azrael

Azrael

Aktives Mitglied
Thread Starter
Dabei seit
01.10.2004
Beiträge
113
Reaktionspunkte
0
Guten Tag

Ich möchte das ein Kunde ein TXT File per Browser über PHP auslesen kann und dann Änderungen vornehmen kann. Das TXT File sieht so aus:

Titel|Hauptext|www.xxxxx.ch|_self

Zuerst muss er den Titel ändern können, dann Haupttext, Website und Angabe wohin der Link führt.

Es ist Zeile für Zeile aufgebaut die man auslesen sollte, die Daten werden getrennt durch das Zeichen |
Kann mir dabei jemand helfen?
 
Wie jetzt? PHP soll irgendwie eine Datei mit .txt-Endung auslesen und so darstellen, dass der Text Zeile für Zeile wie bei einer Textverarbeitung editiert werden kann?

J
 
Mein Vorschlag wäre die TXT Datei zu laden (File-Funktionen von PHP siehe PHP-manual),
die Zeilen mit explode am "|"-Zeichen in arrays aufzubrechen und diese dem Benutzer in einer HTML-FORM zu präsentieren. Es kann ja nicht Aufgabe des users sein, auf die Syntax zu achten!
Das abgesendete Formular aktiviert ein PHP-Skript, was die HTML-FORM-Vorgaben zu einem String per implode zusammenfügt ( wieder mit ""|” als Trennzeichen) und die Datei wird wieder geschrieben. Fertig.
 
Also :D
In dem File "News.txt" stehen folgende Zeilen:

Titel1|Hauptext|www.xxxxx.ch|_self
Titel2|Hauptext|www.xxxxx.ch|_self
Titel3|Hauptext|www.xxxxx.ch|_self

Ich möchte nun das man per PHP das TXT File auslesen und auch ändern kann mit dem Browser per PHP!
Die Rubriken sind im Txt File getrennt durch das Zeichen | , Darstellung sollte nachher auch so aussehen! http://www.seishinbyouin.com/macuser/lala.html
 
Eigentlich nichts besonderes. Dein Script müsste so aussehen:

Öffne .txt (fopen(".txt"))
Lese Inhalt und füge diesen das HTML-Formular "Titel" ein, bis "|" kommt.
Lese Inhalt und füge diesen das HTML-Formular "Haupttext" ein, bis "|" kommt.
usw.

Die Texte sind dann einzeln in den Formularen editierbar und sind für PHP nichts weiter als Variablen, die den gewünschten Inhalt haben.
Mit dem späteren Klick auf "Absenden" im Formular, veranlasst Du noch das Schreiben aller Variablen, bzw. aller Formularinhalte in die Textdatei (fwrite() oder fputs()) und fertig.
 
@Azrael: Dann hast Du doch alles was Du brauchst! File-Funktionen sind im PHP-manual beschreiben, implode() und explode() die Du für die Stringmanipulationen brauchst sind unter Stringfunktionen beschrieben. Was suchst Du noch?
 
Also :)
Damit öffne ich nun mein File und setze es auf r/w

$handle = fopen ("http://www.seishinbyouin.com/macuser/file.txt", "r");

Nun splitte ich den Text mit:

$infos= explode ("|", $handle);

Wie kann ich nun die aufgeteilten Informationen in den leeren Felder darstellen?
 
z.B. so:
PHP:
print "<input type='text' name='titel1' maxlength='10' size='10' value='".$infos[0]."'>";
 
<?php
$datei = file("file.txt");

foreach($datei AS $ausgabe)
{
$zerlegen = explode("|", $ausgabe);

echo "<b>$zerlegen[0]</b><br>
$zerlegen[1]<br><br>$zerlegen[2]<br><br><br><br>$zerlegen[3]<br><br>";
}
?>


Bin weiter gekommen :) Jetzt muss ich es nur noch in die Felder schreiben können und speichern :D
 
Zuletzt bearbeitet:
<?php
$datei = file("file.txt");

foreach($datei AS $ausgabe)
{
$zerlegen = explode("|", $ausgabe);

print "<input type='text' name='titel1' maxlength='25' size='25' value='".$zerlegen[0]."'>";
print "<input type='text' name='titel1' maxlength='40' size='40' value='".$zerlegen[1]."'>";
print "<input type='text' name='titel1' maxlength='40' size='40' value='".$zerlegen[2]."'>";
print "<input type='text' name='titel1' maxlength='10' size='10' value='".$zerlegen[3]."'><br>";
}

?>

So sieht mein Code nun aus!
Wie kann ich die gewünschten Felder geändert speichern und wieder in die Txt schreiben mit dem Befehl implode?
 
Wenn ihr PHP5 zur Verfügung habt… put_file_contents() und get_file_contents() fassen die fopen/fread/fwrite/fclose Prodzeduren zusammen.
 
@Azrael:

Naja zunächst muß ein FORMular um die Textfelder herum ( siehe dazu selfhtml).
Dieses HTML-Formular ruft Deine Verarbeitungsseite (z.B. schreib_txt.php) auf.
Alle Usereingaben stehen dann in $_GET['title1'] oder $_POST['title1'] Variablen und können von Dir per implode zu Textzeilen zusammengefügt werden ( oder beliebige andere Stringmanipulation) und in die datei geschrieben werden.
 
Yves schrieb:
Wenn ihr PHP5 zur Verfügung habt… put_file_contents() und get_file_contents() fassen die fopen/fread/fwrite/fclose Prodzeduren zusammen.

PHP5 ist vorhanden *g* aber mein Wissen fehlt noch ;D
 
Danke :)


Mein jetziger Code:

<form action="speichern.php" method="post">
<?php
$datei = file("file.txt");

foreach($datei AS $ausgabe)
{
$zerlegen = explode("|", $ausgabe);

print "<input type='text' name='titel1' maxlength='25' size='25' value='".$zerlegen[0]."'>";
print "<input type='text' name='titel1' maxlength='40' size='40' value='".$zerlegen[1]."'>";
print "<input type='text' name='titel1' maxlength='40' size='40' value='".$zerlegen[2]."'>";
print "<input type='text' name='titel1' maxlength='10' size='10' value='".$zerlegen[3]."'><br>";

}
print "<input type='submit' value='Speichern' />";
?>

</form>


Dann Datei: speichern.php

<?php
$datei = "file.txt"; // Datei
$fp = fopen($datei,"w"); //Datei öffnen
$data = ".$zerlegen[0].";

fputs($fp,$data); # daten in datei speichern
fclose($fp);
?>

Aber es will noch ned wirklich :D
 
Sorry, ich kann Dir hier nicht wirklich Programmieren beibringen oder mit Dir im Dialog Eines erstellen! Einzelne Probleme gern, aber daß Du hier anfängst jeden Code-Schritt zu posten, ist nicht wirklich sinnvoll!
Die Struktur wie man so etwas macht, wurde Dir mehrfach vorgegeben. Hangel Dich daran entlang und komm mit Teilproblemen wieder hierher zurück. Nicht mit ganzen Programmen.

Tipp: Schau Dir mal an, welchen Wert $zerlegen in Deiner Datei speichern.php hat und lies mal nach, wozu es $_POST gibt bei PHP ;)
 
Schau Dir mal die Ausgabe von print_r($_POST['zerlegen']); an. Mit dem Vorherigen Tip (Funktion implode) solltes Du es eigentlich schaffen.
 
Du solltest dich erstmal in die generellen Dateioperation in php einarbeiten. Du machst die Datei ja noch nicht mal auf geschweige denn durchläufst du sie, um sie dabei zeilenweise auszulesen.

Aber es will noch ned wirklich

Ja, solche Fehlermeldungen bekomme ich auch laufend.

Matt
 
Ich habe jetzt verschiedene Arten ausprobiert um die Datei zu speichern, aber ich kriege es einfach ned hin..auch nach 5Stunden ned, ist das deprimierend :/
Wenn er mal was in die Datei schreibt, dann nur ein Feld...aber das bringt es nicht.
 
aendern.php
Code:
<form action="speichern.php" method="post">
<?php
$datei = file("file.txt");

$i=0;
foreach($datei AS $ausgabe) {
   $zerlegen = explode("|", $ausgabe);
   print '<input type="text" name="zerlegen['.$i.'][0]" maxlength="25" size="25" value="'.$zerlegen[0].'">';
   print '<input type="text" name="zerlegen['.$i.'][1]" maxlength="40" size="40" value="'.$zerlegen[1].'">';
   print '<input type="text" name="zerlegen['.$i.'][2]" maxlength="40" size="40" value="'.$zerlegen[2].'">';
   print '<input type="text" name="zerlegen['.$i.'][3]" maxlength="10" size="10" value="'.$zerlegen[3].'"><br>';
   $i++;
}
print '<input type="submit" value="Speichern" />';
?>

</form>
speichern.php
Code:
<?php 
$datei = "file.txt"; // Datei 
$fp = fopen($datei,"w"); //Datei öffnen

foreach($_POST['zerlegen'] as $zeilenteile) {
   $zeile=implode('|',$zeilenteile)."\n";
   fputs($fp,$zeile);
}

fputs($fp,$data); # daten in datei speichern
fclose($fp);

header("Location: aendern.php");
?>

Bitte nicht nur einfach Copy&Paste. Schau es Dir an, damit Du es auch verstehst. ;)
 
Zurück
Oben Unten