Daten Auslesen und eintragen

melistik

Erfahrenes Mitglied
Wie man etwas in eine .txt datei einschreibt habe ich verstanden und kann damit auch umgehen. Das man zeile für zeile auslesen kann weiss ich auch, doch ich verstehe nicht wie man in eine zeile mehr information eintragen kann, und er die verschiedenen informationen unterscheidet. In einem Script von ppopn habe ich es gefunden und würde gern dieses auch anwenden und verstehen.
zb:
ppopn@gmx.net|--|http://www.PPoPn.de|--|21:03|--|23.04.2002|--|127.0.0.1|--||--|

hinzu kommt noch eine fragen :)
wenn man in einem Formular eine neue zeile beginnnt also mit enter, wird in der text datei auch eine neue Zeile erstellt obwohl ich dieses nicht möchte und eher das in der datei <br> zb steht für mein enter. Dieses soll bewirken das es im Formular eintrag genauso aussieht nacher im ausgegeben teil also zb bei news.
sprich wenn ich enter im Formular mache (um neue news einzutragen) soll er nachehr auch in dem newsbereich an sich eine neue zeile machen aber nicht in der .txt datei. Hört sich ganz komisch und verwirrent an ich weiss aber ich hoffe einer versteht mich und hatte auch schon einmal das problem und kann helfen :-)
 
zur ersten frage kann ich nicht helfen... das enter in <br> umzuwandeln geht ganz einfach....

du hastn textfeld das heisst textfeld udn gibst dort irgendwas ein und drückst enter dabei... biem unwandeln einfach nur

$textfeld = nl2br($textfeld);

ich bevorzuge noch die umwandlung in html tags....

$textfeld = nl2br(htmlentities($textfeld));

:)
~basti
 
Nu wenn in einer Zeile mehrere Datenfelder an Informationen unterbringen möchtes braucht du ein eigenes Trennzeichen

in deinem Beispiel ist es |--|

man liest also eine Zeile ein und jagt dann die Function explode über die Zeile dann bekommst du ein Array mit allen Datenfeldern

und das umsetzen von einem Return von der Tastatur macht man bei Textfilen
nicht mit nl2br weil durch diese Function nicht die Returnzeichen entfernt werden - und dass bringt dein Einlesescript durcheinander

in dem fall benutzt man str_replace("\n","<br>",$zeile);
im fall von windows muss noch das Zeichen \r aus dem string
rausgeworfen werden
 
PHP:
$inhalt = file("deinedatei.txt");
$alledaten = array();
foreach ($inhalt as $zeile) {
    $alledaten[] = explode("]--[", $zeile);
}
So, nun hast du in $alledaten ein zweidmiensionales Array, das ungefär so aufgebaut ist:
PHP:
array (
[0] => array(
          "ppopn@gmx.net",
          "www.PPoPn.de",
          "21:03",
          "23.04.2002",
          "127.0.0.1",
          ""
          )
)
 
Zuletzt bearbeitet von einem Moderator:
sind nicht dann die Variablen namen der inhalt ?
ich habe mal bei selfphp nach dem explode gesucht und auch was gefunden :)
nun ja dann habe ich mir mal was zusammengeschrieben und wollte fragen ob das so gehen würde :)
PHP:
<?PHP
$datei = "eintraege.txt";
fopen ( $datei, "r" ) or die (" $datei konnte nicht geöffnet werden");
for($x=0;$x<count($datei);$x++)
{

$array_$x = explode("]--[",$datei,4);
 
echo "name: $array_$x[0]";
echo "headline: $array_$x[1]";
echo "text: $array-$x[2]";
echo "date: $array_$x[3]";
}

?>

Also er ließt die datei eintraege.txt aus, und gibt dann solange jede zeile aus bis die $datei zuende ist. durch das $array_$x bewirke ich das jeder neuer eintrag (von zeilen her gesehen) seinen eigenen $array_$x hat. Damit könnte man doch dann einen kompletten Newsscript oder Gästebuch eintrag gestalten und für jeden Eintrag in der Datei eintraege.txt nur eine Zeile verwenden und verschiedenste informationen auslesen ?!

Kann man das so alles realisieren ? ich habe es noch nicht ausgetest, wollte erst voher die fachmänner fragen :rolleyes:
 
Dein Code geht nicht, weil:

- Der Rückgabewert von fopen einer Variable zugewiesen muss, sonst weiss PHP später nicht, welche Datei es bearbeiten soll.
- Nimm statt for hier besser foreach
- $array_$x was ist das?
- explode("]--[",$datei,4); hier wird nicht die Datei eintraege.txt editiert, sondern der String eintraege.txt

Nimm lieber meins, ich hab den Fehler ausgebessert.
Die Daten kannst du bei meinem Script folgendermassen ausgeben:
PHP:
foreach($alledate as $eindat) {
    echo "name: ".$eindat[0]."<br>\n";
    echo "headline: ".$eindat[1.]"<br>\n";
    echo "text: ".$eindat[2]."<br>\n";
    echo "date: ".$eindat[3]."<br>\n<br><br><br>\n";
}

Kann man das so alles realisieren ?
Ja. Aber bitte such und frag nicht, ob wir dir eins machen können.

Hier noch eins von mir :)
 

Anhänge

PHP:
<?PHP
$datei = "eintraege.txt";
fopen ( $datei, "r" ) or die (" $datei konnte nicht geöffnet werden");
for($x=0;$x<count($datei);$x++)
{

$array_$x = explode("]--[",$datei,4);
 
echo "name: $array_$x[0]";
echo "headline: $array_$x[1]";
echo "text: $array-$x[2]";
echo "date: $array_$x[3]";
}

?>
Also: die Zeile for ($x = 0; $x < count ($datei); $x++)

kann nicht funktionieren, da $datei kein Array ist.

PHP:
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
}

So kannst du dir den Inhalt Zeilenweise anzeigen lassen.
 
Original geschrieben von Nuinmundo
Ja. Aber bitte such und frag nicht, ob wir dir eins machen können.
Äm habe ich gefragt ob ihr ein komplettes für mich schreibt ich wollte nur hilfe ob man das so machen kann ? nein
Das mit dem $x ist mir nun auch aufgefallen das man das ja wegfallen lassen kann,
da man ja etwas ausgibt dann in die nächste zeile springt und dann das nächste ausgibt

PHP:
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
}
das wäre ja nichts mit array und somit kann ich damit nichts anfangen wenn ich mehrere infos in einer zeile schreibe
wie name message und so weiter. meine ich zumindest :]

wie muss ich bei der foreach die arrys abtrennen ?
bei foreach wird ja in der variablen $alldate mit jedem durchlauf jeweils ein element des arrays $eindat zugeweisen
so steht es in meinem buch. Dann verstehe ich das so, dass ein array nur eine zeile sein kann oder ?
 
Du kannst ja statt echo auch explode () verwenden.
Dies war ja nur ein Beispiel und keine komplette Lösung. Kombinieren musst du selbst.

explode () im PHP Handbuch

Also:
PHP:
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    $ausgabe[] = explode ("Trennzeichen", $buffer);
}
Wenn du verschiedene Werte pro Zeile (Name, Vorname etc. z.B) hast kannst du doppelt indizieren.
PHP:
$i = 0;
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    $foo = explode ("Trennzeichen", $buffer);
    $ausgabe[$i]["name"] = $foo[0];
    $ausgabe[$i]["vorname"] = $foo[1];

    $i++;
}

Oder noch geschickter: du legst Klassen an.
 
Zuletzt bearbeitet:
Zurück