PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : datei auslesen und bearbeiten....


jimipil
28.04.2002, 16:15:13
hi, hab ne anfänger frage ;)

ich hab auf dem server eine textdatei liegen...
die so aussieht
----
<?%HD 1024 plus#1,324#1994#April 27th 2002#1A Ger&auml;t, zu empfehlen...
%HDS 895 S#1800,--#1999#April 27th 2002#echt fertig dia schissl
%BR Vario#600,--#1997#04/27/2002#....nice :)
%hds 890#1300,--#1980#04/28/2002#uighd
---
jetzt möchte ich machen, dass ich immer die einzelnen zeilen löschen kann per php script....aber wie? das mit dem schreiben kireg ich durch tutorials hin....aber das mit dem löschen der einzelnen zeilen....

kann mir wer ein kompletes beispiel zeigen, weil ich bin php newbie...

thx

Dago
28.04.2002, 16:45:59
<?php

$inhalt = file('textdatei.txt');

$fp = fopen('textdatei.txt','w');
flock($fp,2);
while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
if (!isset($HTTP_POST_VARS['delete'.$inhalt_key])) {
fwrite($fp,$inhalt_val."n");
}
}
flock($fp,3);
fclose($fp);

?>



Erläuterung:

In der ersten Anweisung wird deine Textdatei in ein Array eingelesen. Jedes Element des Arrays entspricht dabei einer Zeile.
In der While-Schleife wird das Array dann von 0 bis "zum Schluss" aufgelistet - 0 ist also die erste Zeile der Textdatei, 1 die Zweite usw.
Während die Schleife läuft, prüft PHP, ob 'delete"Nummer der Zeile"' per Post übermittelt wurde. Wenn nicht, dann wird die aktuelle Zeile in die Datei geschrieben - falls ja, wird nichts geschrieben (also wird die Zeile praktisch gelöscht).

Du brauchst dann natürlich noch ein Formular, dass dir die Zeilen der Textdatei und die dazugehörigen "delete's+Zeilennummer" auflistet.

jimipil
28.04.2002, 17:45:42
hmm irgendwie bringt er bei mir ein fehler Parse error: parse error in /home/www/philipp/.jimipil/eintrag/test.php on line 7

wenn ich das script ausführe....kannst du mir das bitte genauer erklären, weil das ist mein erstes php projekt ;)....

also so hab ich das gemacht neues file... test.php mit dem inhalt
---
<?php

$inhalt = file('data.dat');

$fp = fopen('data.dat','w');
flock($fp,2);
while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
if (!isset($HTTP_POST_VARS['delete'.$inhalt_key])) {
fwrite($fp,$inhalt_val."
");
}
}
flock($fp,3);
fclose($fp);

?>
-----------
mach ich was falsch? und wie wäre das noch mit dem deleten ich versteh die sprache net ganz...sorry plz help

Dago
28.04.2002, 17:50:38
Ich bekomme keinen Parse Error... (hab deinen Post einfach kopiert).
Welche PHP-Version hast du?

jimipil
28.04.2002, 17:51:53
hier: http://www.mynet.at/philipp/.jimipil/eintrag/test.php

weiss es nicht

Dago
28.04.2002, 17:53:46
Erfährst du durch



<?php

phpinfo();

?>

jimipil
28.04.2002, 17:55:15
PHP Version 4.0.6

Dago
28.04.2002, 18:00:08
Hab's grad ausprobiert auf 4.0.6 - läuft ohne Parse Error ab.
Du hast wahrscheinlich dieses "& #123;"-Zeichen mitkopiert, oder?
Das ist ein Bug hier im Forum und soll eigentlich eine "{"-Klammer sein.

jimipil
28.04.2002, 18:04:07
jetzt gehts, ich sagte ja ich bin ein voller newbie ;)

aber kannste mir noch kurz erläutern wie des jetzt mit dem deleten geht? bitte

ich kenn mich mit der php fachsprache net....aus

danke im vorraus!

Dago
28.04.2002, 18:24:47
<?php

#Datenverarbeitung
if (isset($HTTP_POST_VARS['delete'])) {
$inhalt = file('textdatei.txt');
$fp = fopen('textdatei.txt','w');
flock($fp,2);
while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
if (!isset($HTTP_POST_VARS['delete'.$inhalt_key])) {
fwrite($fp,$inhalt_val);
}
}
flock($fp,3);
fclose($fp);
}
#ENDE: Datenverarbeitung

#Datenausgabe
$inhalt = file('textdatei.txt');

echo '<form method="post" action="'.$HTTP_SERVER_VARS['PHP_SELF'].'">';
while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
echo $inhalt_val.'<input type="checkbox" name="delete'.$inhalt_key.'"><br>';
}
echo '<input type="submit" name="delete"></form>';
#ENDE: Datenausgabe

?>



So, hier ein ganz einfaches Skript, dass dir den Inhalt der Datei "textdatei.txt" zeilenweise ausgibt und die dazugehörigen Checkboxen erzeugt.
Beim klick auf den Submit-Button werden dann die Zeilen gelöscht, die du angekreuzt hast.

In der Zeile mit "fwrite($fp,$inhalt_val);" hab ich das "
" weggelassen, mir ist nämlich aufgefallen, dass die file-Funktion die Zeilenumbrüche mitkopiert.

So, ich hoffe, damit ist alles klar :)

jimipil
28.04.2002, 18:31:23
aber noch ne frage, kann man das auch so machen dass er nur soviele kästchen macht wie in der datei zeilen sind?

muss net sein aber wäre nocht genialer :D

danke, danke dago

achja noch was hab grad bemerkt dass er die erste zeile in der txt nicht anzeigt!

nämlich diese
---
<?%HD 1024 plus#1,324#1994#April 27th 2002#1A Gerät, zu empfehlen...
---


Plz help...thx

Dago
28.04.2002, 19:01:49
Normalerweise tut er das auch, es sei denn, die Datei beinhaltet Leerzeilen oder Absätze.
Wenn dem so ist, kannst du die anzeige von weiteren Checkboxen durch eine If-Abfrage verhindern:

if (strlen($inhalt_val) > 2)

muss dann vor der echo-Ausgabe in der while-Schleife stehen.

Dago
28.04.2002, 19:04:38
achja noch was hab grad bemerkt dass er die erste zeile in der txt nicht anzeigt!

nämlich diese
---
<?%HD 1024 plus#1,324#1994#April 27th 2002#1A Gerät, zu empfehlen...
---


Plz help...thx

Hm... das liegt an dem "<?"... Weiß jetzt aber auch nicht, wie man das umgehen könnte.

Dago
28.04.2002, 19:10:55
Achso... Wenn du dir mal den Quelltext anschaust, wirst du bemerken, dass er die Zeile ausgibt, nur dass sie im Browser nicht angezeigt wird...
Tausch mal "$inhalt_val" durch "htmlentities($inhalt_val)" aus ;)

jimipil
28.04.2002, 19:16:30
aber das mit dem ersten eintrag...hmm kann man da vielleicht was an der eintragung verändern?

soll ichs mal posten? das eintragungs verfahren?

thx dago hast mir sehr viel geholfen! ;)

Dago
28.04.2002, 19:21:47
Geht es mit htmlentites etwa auch nicht?

jimipil
28.04.2002, 19:30:17
wo genau htmlentities($inhalt_val) hinkopieren....weil der befehl steht öfters drinnen, habs probeirt ueberall hinzukopieren aber dann wurde mir kein eintrag mehr angezeigt....plz help ;)

Dago
28.04.2002, 19:38:00
In der letzten While-Schleife ;)

jimipil
28.04.2002, 20:06:07
yeah, thx jetzt bin ich gluecklich ^^


danke...