Hallo zusammen,
ich versuche mich seit einiger Zeit in PHP und habe mich nun an ein etwas "komplexeres" Thema gewagt ...
... und schon tauchen die Probleme auf *g*
Situation:
Ich schreibe Kontaktdaten in ein Textfile.
Jeder Datensatz steht in einer Reihe.
Die einzelnen Felder sind durch "#" getrennt.
Das erste Feld enthält eine durchlaufende Nummer.
Von einer Auflistung der Kontaktdaten aus möchte ich per Klick den gewählten Datensatz (also die entsprechende Zeile im txt-file) löschen.
Dazu rufe ich mein "delete.php" auf und übergebe die durchlaufende Nummer der Zeile (delid).
Hier erstmal der code der delete.php
(das Problem beschreibe ich danach !)
<?PHP
$delid = $_GET['delid'];
$dir = opendir('../data');
$filename = '../data/kontakte.txt';
$filename2 = '../data/tempkontakte.txt';
$fp = fopen($filename, "r");
$fp2 = fopen($filename2, "a");
$contents = file($filename);
$anzahl = count($contents);
$setid = 1;
for ($a=0;$a<$anzahl;$a++) {
list $id,$name,$vorname,$strasse,$plz,$ort,$telg,$telp,$mobg,$mobp,$mail1,$mail2,$nick,$burtzel) = explode("#", $contents[$a]);
if ($fp2) {
flock($fp2,2);
if ($id == $delid) {
$setid = $setid;
}
else {
fputs ($fp2, "$setid#$name#$vorname#$strasse#$plz#$ort#$telg#$telp#$mobg#$mobp#$mail1#$mail2#$nick#$burtzel ");
$setid = $setid+1;
}
flock($fp2,3);
}
else {
echo "Fehlaaaa!";
}
}
// close file
fclose($fp);
fclose($fp2);
unlink('../data/kontakte.txt');
if (rename("../data/tempkontakte.txt", "../data/kontakte.txt")) {
echo "ok";}
closedir($dir);
?>
Soviel dazu... ich denke mal, es geht auch wesentlich einfacher !?
Nun zum Problem:
Lösche ich (bei z.B.10 Datensätzen gesamt) einen aus der Mitte (also z.B. den fünften) funktioniert alles wunderbar - ich habe im Anschluss 9 Zeilen mit den durchlaufenden Nummern 1 bis 9...
Lösche ich aber den letzten Datensatz, habe ich AUCH 9 Zeilen (wieder 1 bis 9), allerdings hat das txt-file eine Leerzeile am Schluss, was dazu führt, dass ein leerer Datensatz ohne Nummer (müsste dann ja 10 sein) angezeigt wird...
Frage:
(1.) Wieso taucht da die Leerzeile auf ?
Ich sehe keinen Grund, warum das passiert !?
(2.) Hat jemand eine Idee, wie ich diese Leerzeile verhindern kann ?
Thnx 4 support !
Pedda