Hello,
Erst eine Frage: Hat der Unterstrich vor data eine tiefere Bedeutung? Oder machst du das halt nur einfach so? $_data
Ich kennzeichne so die Arrays, angelehnt an $_POST ...
Normale Skalare heißen dann eben $skalar
PHP kennt ja intern nur diese zwei Typen und dann natürlich Funktionen, Klassen Konstanten etc.
Ich hab jetzt eigentlich alles laut deinen Anweisungen gemacht:
$fp = fopen("aktuell.txt","a+");
flock($fp,LOCK_EX);
fseek($fp,0,SEEK_SET);$string_packed = fread($fp,filesize("aktuell.txt"));
$_data = unserialize($string_packed);
$_data[] = $_daten;
$string_packed_neu = serialize($_data);
fseek($fp,0,SEEK_SET);
fwrite($fp,$string_packed_neu,strlen($string_packed_neu));$test = ftruncate($fp,strlen($string_packed_neu));
fclose($fp);Nachdem ich nun aber zweimal abgeschickt habe steht in der Textdatei:
a:1:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:"1";}}a:2:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:
Es scheint mir, als ob der das neue einfach hintendran gesetzt hat, und dann eben wie gewünscht abgeschnitten hat. Aber warum zum Teufel setzt der das hintendran?
Weil das $_data[] = $_satz; den Satz immer hinten an das Datenarray anhängt.
Wenn Du gezielt ein Arrayelement verändern willst, musst Du den Index angeben
$_data[27] = $_satz;
würde den neuen oder veränderten Datensatz auf Index 27, also auf die 28. Stelle (wenn noch kein Element fehlt) schreiben.
Teil doch Deine das Array:
$_meta = array();
$_data = array();
irgendwie ganz am Anfang, wenn die Datei noch nicht da war...
$_file = array();
$_file['meta'] = array();
$_file['data'] = array();
$_file['meta']['lastid'] = 0;
$_file['meta']['lastupdate'] = date(...);
für den ersten Datensatz:
$_file['meta']['lastid']++;
$id = $_file['meta']['lastid'];
$lastdate = $_file['meta']['lastupdate']; # für die Anzeige merken
$_file['meta']['lastupdate'] = date(...); # für die Veränderung speichern
$_file['data'][$id]['autor'] = $_POST['autor']; # vergiss stripslashes() nicht
...
$filestream = serialize...
Und weg damit.
Wie du siehst: Array in Array in Array...
datei --+---[meta]--+----[lastid]----'4'
| +----[lastdate]--'20040615'
|
|
+---[data]--+----[0]--+--[autor]----'thomas'
( | ) | +--[titel]----'speichern in Flatfiles'
( | ) | +--[test]-----'blablabla'
v |
usw. |
+----[3]--
|
|
|
|
+----[4]--
Datensatz 1 und 2 wurden schon gelöscht. Schade eigentlich. Trotzdem wissen wir, dass die nächste ID die 5 sein muss. Ist doch klasse, oder?
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau