Datei .. kanns nich beschreiben ^^

Also ich musste ein Gästebuch mit Dateien schreiben
In der "count.txt" habe ich alle beitrags id s gespeichert:

0
1
2
3
4
5
6
7
8
9
10

so wie kann ich jetz aus einem Script heraus eine ID suchen und diese dann löschen ?
also in der Datei ? bisher hab ich es so versucht:

PHP:
$filename = "data/count.txt";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);

echo "<textarea>";
var_dump($contents);
echo "</textarea>";

$contents = str_replace(trim($id)."\n","",$contents);

echo "<textarea>";
var_dump($contents);
echo "</textarea>";
$handle = fopen ($filename, "w");
$contents = fwrite($handle,$contents);
fclose ($handle);

manchmal löscht er die ID und manchmal nicht -> das is Obskur!
wie kann ich es sonst löschen ? vieleicht vor jede ID id: schreiben z.B.

id: 1

und dann :

$contents = str_replace("id: ".trim($id),"",$contents);

oder wie sonst ?

ps: mit mySQL würd ich es gern machen soll aber nicht klar ?! ok
 
Ich hätte den Inhalt der Datei eher in ein Array gespeichert, dann den entsprechenden Schlüssel gelöscht und dann wieder gespeichert.

ps: mit mySQL würd ich es gern machen soll aber nicht klar ?! ok
Bedeutet was nun genau?
 
Das ich es gern damit machen würde aber nicht darf !!

also in etwa so:

PHP:
$count = array();
$file = fopen("data/count.txt","r");

while(!feof($file)){
array_push($count,fgets($file,100));
}

fclose($file);

//Den Array durchsuchen
$found = array_search($id,$count);
unset($count[$found]);

$file = fopen("data/count.txt","w");
for($i=0;i<=count($count);){
fwrite($file,$count[$i]);
}
fclose($file);

habs jetz nich ausprobiert werds aber gleich machen naja ^.- danke schonmal
 
Allgemeiner Hinweis:

Nur weil du mit Dateien arbeiten musst, heißt das ja noch nicht, dass du auch Klartext in die Dateien schreiben musst. Wenn du eine schöne Datenstruktur in PHP hast, z.B. eben die Beiträge als multidimentionales Array, dann kannst du das ja auch mittels serialize() als String in eine Datei schreiben. Wenn du das ganze wieder auslesen willst, gibt's dafür analog unserialize().

So musst du dich nicht um großartige Übersetzungen von Klartext in deine Datenstruktur kümmern. Wenn du dann beispielsweise einen Eintrag löschen willst, entfernst du einfach das entsprechende Array-Element und speicherst das ganze wieder serialisiert ab.
 
Original von LX
So musst du dich nicht um großartige Übersetzungen von Klartext in deine Datenstruktur kümmern. Wenn du dann beispielsweise einen Eintrag löschen willst, entfernst du einfach das entsprechende Array-Element und speicherst das ganze wieder serialisiert ab.

Der Nachteil dabei ist, dass das Ganze bei größeren Datenmengen nicht mehr wirklich handhabbar ist.
Falls du PHP 5 hast und SQLite benutzen darfst (ein Datenbanksystem dass auf einer Textdatei aufbaut) wäre das auch noch eine sehr gute Alternative.
 
Ich weiß zwar nicht genau wie viele Einträge es geben wird,
aber so über 500 dürften es schon werden...
ist das noch handhabbar ??

ps: außerdem wird das Script nur ab und zu vom Admin aufgerufen
(Um Müll oder Spamm zu löschen)
Mein Scruipt im Moment:

PHP:
<?php
$count = array();
$count_tmp = array();

$file = fopen("data/test.txt","r");

while(!feof($file)){
	$string = fgets($file,100);
	$string = str_replace("\r\n","",$string);
	$string = str_replace("\n","",$string);
	
	array_push($count,$string);
}
echo "count(count): ".count($count);

fclose($file);

echo "<pre>";   //Konzept testen
var_dump($count);
echo "</pre>";


//array durchsuchen und löschen.
$res = array_search("2",$count);
if(!res==0){
	unset($count[$res]);
}else{
	die("\$res = 0");
}

//temporären Array schreiben

$schleifen_durchlauf = count($count);

for($i=0;$i<=$schleifen_durchlauf;$i++){
	if(!strlen($count[$i])<=0){
		array_push($count_tmp,$count[$i]);
	}	
}

$file = fopen("data/test.txt","w");

$schleifen_durchlauf = count($count_tmp);

for($i=0;$i<$schleifen_durchlauf;$i++){
	if($i==$schleifen_durchlauf-1){
		fwrite($file,$count_tmp[$i]);
		break;
	}
	fwrite($file,$count_tmp[$i]."\n");
}

fclose($file);

echo "<pre>";   //Konzept testen
var_dump($count_tmp);
echo "</pre>";

echo "count(count_tmp): ".count($count_tmp);

?>

Das funktioniert wunderbar:
var_dump():

$count:
array(6) {
[0]=>
string(1) "0"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
[3]=>
string(1) "3"
[4]=>
string(1) "4"
[5]=>
string(1) "5"
}

$count_tmp:
array(5) {
[0]=>
string(1) "0"
[1]=>
string(1) "1"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
}

Danke für eure Hilfe =)
 
Zurück
Oben