Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
löschen von 8 Zeilen aus Textdatei mit for-Schleife [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
löschen von 8 Zeilen aus Textdatei mit for-Schleife


 
israelsson
16-11-2004, 17:00 
 
Hey!

Ich habe ein Datenbank (textdatei) in der mehrere Einträge stehen. Jeder Eintrag bestrht aus 8 zeilen! nun soll in meinem Script der komplette zweite Eintrag gelöscht werden. (Logischerweise ist der erste Eintrag zeile 1 bis 8, der zweite Eintrag zeile 9 bis 16 usw...). Das ganze soll nachher durch ein Formular ($min und $max sowie $datei) gesteuert werden. Nur warum kann ich die Funktion "function delete_line" nicht mit einer for-schleife 8 mal die zeilen löschen lassen? Es wird zwar die erste von den 8 gelöscht, dann kommt eine Fehlermeldung:

Warning: Missing argument 3 for delete_line() in \www\forum\del_eintrag.php on line 6

Fatal error: Cannot redeclare delete_line() (previously declared in \www\forum\del_eintrag.php:6) in \www\forum\del_eintrag.php on line 6

Was also aus der Fehlermeldung klar wird, findet die funktion die Variable $i nach dem ersten Durchgang nicht! Wie könnte man diese Problem lösen? Geht das was ich vorhabe mit einer for schleife überhaupt?

Bitte um hilfe!
Danke im Voraus!


$datei = "datei.txt";
$min = "9";
$max = "16";
for($i=$min; $i <= $max; $i++) {
// Eintrag löschen
function delete_line($file, $line, $change_in) {
$entries = file($file);
if(empty($change_in)) {
unset($entries[$line-1]);
} else {
$entries[$line-1] = $change_in;
}
$newentries = implode("", $entries);
$datei_forum = fopen($file, "w");
fputs($datei_forum, $newentries);
fclose($datei_forum);
}
delete_line("$datei", $i);
}
echo "gelöscht...";


MFG Israel's Son

 
Wurzel
16-11-2004, 17:05 
 
du solltest die funktion mal aus der schleife nehmen ;)

 
israelsson
16-11-2004, 17:09 
 
du solltest die funktion mal aus der schleife nehmen

aber wenn ich die funktion aus der schleiße nehme, bring das ganz ja nichts mehr! Die schleiße soll ja bewirken, das die Funktion zeile $min bis zeile $max nacheinander löscht... wenn ich die funktion aus der schleife nehme wird auch nur der erste datensatz (1. zeile) gelöscht, und dann folgt wieder die fehlermeldung das die Variable $i nicht erkannt wurde...

Hab grade mal ausprobiert in der Funktion

Global $i;

einzusetzen, bringt auch nix...

 
wahsaga
16-11-2004, 17:11 
 
Original geschrieben von israelsson
aber wenn ich die funktion aus der schleiße nehme, bring das ganz ja nichts mehr! Die schleiße soll ja bewirken, das die Funktion zeile $min bis zeile $max nacheinander löscht...
mach dir bitte mal den unterschied zwischen der deklaration und dem aufruf einer funktion klar.


und lies dir bitte http://www.php.net/manual/de/functions.php gründlich durch, bevor du eine weitere frage dieser qualität stellst.

 
Wurzel
16-11-2004, 17:13 
 
zunächst DARF eine funktion in einem script nur 1x vorhanden sein, dann kannst sollte die funktion einen rückgabe wert haben. abgesehen davon brauchst du keine funktion dafür. wenn die daten als array vorliegen, reicht "unset()" auf den jeweiligen array-schlüssel.

 
israelsson
16-11-2004, 17:26 
 
frage dieser qualität

Oh man, wieso kann man denn hier nicht einfach mal helfen ohne zu beleidigen und runterzumachen?

Ich bin halt noch nicht lange bei php! Kann ich was dafür das ich manchen noch nicht weiß?
So schlimm kann das für dich doch nicht sein oder?

Der Tipp mit dem funktion aus der schleife nehmen war doch garnicht so schlecht!
Jetzt gehts nämlich! hab den Fehler gefunden!
In der funktion war noch ein fehler, und außerdem hatte ich die for schleiße an der falschen stelle und sowieso total bescheuert! Die darf nicht von $min zu $max löschen, sondenr nur von $max zu $min, sonst würde ja immer eine zeile ausgelassen werden und sich das dann multiplizieren... andersrum fängt die funktion hinten an und endet da wo sie aufhören soll!

hier nochmal mein script! dann könnt ihr euch ja drüber aufregen wie komopliziert und dumm ich das geschrieben habe! Hauptsache es funktioniert und erfüllt den zweck den ich brauche!

Möcht mich bedanke für eure Hilfe! Die Tipps waren super!

MFG Israel's Son


$datei = "66310.txt";
$min = "9";
$max = "16";
// Eintrag löschen
function delete_line($file, $line, $change_in) {
Global $i;
$entries = file($file);
if(empty($change_in)) {
unset($entries[$line-1]);
} else {
$entries[$line-1] = $change_in;
}
$newentries = implode("", $entries);
$datei_forum = fopen($file, "w");
fputs($datei_forum, $newentries);
fclose($datei_forum);
}
for($i=$max; $i >= $min; $i--) {
delete_line("$datei", $i, "");
}
echo "Eintrag gelöscht...";

 
wahsaga
16-11-2004, 19:27 
 
Original geschrieben von israelsson
Ich bin halt noch nicht lange bei php! Kann ich was dafür das ich manchen noch nicht weiß?
ja - beschäftige dich zuerst mit den grundlagen, bevor du einfach so drauf los scriptest.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.