zeile aus datei löschen? :(
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ampel
angabe
aufbau
auslese
bestimmen
datei
datenbank
eintrag
frage
funktion
gel
inhalt
modus
schnelle hilfe
stimmen
tabelle
tip
verhindern
zahl
zeile
-
also ich hab ne frage ^^
ich hab eine datei z.B. datei.db, meine frage lautet jetzt wie
kann ich die datei ?ffnen und eine bestimmte zeile daraus l?schen?
geht das ?berhaupt? weil sonst m?sste ich ja f?r jeden eintrag eine neue
datei erstellen... das is etwas l?sstig ^^ der aufbau in der datei is
1|wert|wert u.s.w.
2|wert|wert u.s.w.
3|wert|wert u.s.w.
die zahl entspricht der id.. auslesen anhand der id geht ja das hab ich auch schon aber l?schen bekomm ich irgendwie nich auf die reihe :/ w?re f?r schnelle hilfe dankbar :) und f?r langsame nat?rlich auch ;>
schonma thx, mfg cracken -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
?hm so als tipp nimm ne datenbank das is wesentlich einfacher ^^
aber um dein prob trotzdem zu l?sen hier:
$zeiletodelete = "2"; // Zeile 2 wird gel?scht
$inhalt = "";
$datei = fopen("datei.dbl", "w");
while (!feof($datei))
{
$zeile = fgets($datei, 4096);
if($zeile=='$zeiletodeltet") { }
else
{
$inhalt .= $zeile;
fputs($datei, $inhalt);
}
}
fclose($datei); -
In dem Beispiel von lucas9991 sind drei Fehler:
1. Vergleich von $zeile mit $zeiletodelete:
$zeile ist der Inhalt der aktuell eingelesenen Zeile und wird nie einfach nur "2" sein, wenn crackens Angaben zum Aufbau der Tabelle stimmen.
2. fputs() schreibt dorthin, wo der Dateizeiger gerade steht. Da man gerade was gelesen hat, wird dorthin geschrieben, wo zuletzt was gelesen wurde. Das w?rde die ganze Datei vollkommen durcheinanderbringen.
3. Wenn die Datei mit fopen() mit dem Modus "w" ge?ffnet wird, gibt es sowieso nichts mehr zum Lesen, da fopen() mit dem Modus w (write) die Datei erstmal komplett l?scht. -
$zeiletodelete = 2; // Zeile 2 wird gel?scht
$inhalt = "";
$counter = 0;
$datei = fopen("datei.dbl", "r+");
while (!feof($datei))
{
$counter++;
$zeile = fgets($datei, 4096);
if ($counter != $zeiletodelete)
$inhalt .= $zeile;
}
rewind($datei);
ftruncate($datei, 0);
fputs($datei, $inhalt);
fclose($datei);
Es gibt nur ein Problem bei diesem Code: Was passiert, wenn zwei User gleichzeitig das Skript ausf?hren und die Datei somit von zwei Prozessen gleichzeitig bearbeitet wird? Das kommt zwar in der Realit?t wirklich selten vor, aber wenn es passiert, dann ist mit der Datei (zumindest f?r Skripte) nichts mehr anzufangen. Um das zu verhindern, sollte man eine andere Datei als "Ampel" bestimmen und sich die Funktion flock() (kennt eigentlich jeder, der in C schon mal was Umfangreicheres unter Linux/Unix programmiert hat) anschauen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage