So. 08.08.2004
19:57 Uhr
#1
Hallo.
Ich bin gerade dabei PHP zu lernen. Und da du ja ein PHP-Pro bist, wollte ich fragen:
[code:1:b3a1fd03c8]
if ($gesendet)
{
$fp = fopen("data.txt", "a");
if ($fp)
{
flock($fp,2);
fputs ($fp, "$name, $datum, $ort");
echo ("Datei wurde beschrieben.");
flock($fp, 3);
fclose($fp);
}
exit();
}
[/code:1:b3a1fd03c8]
Ich habe eine Textdatei erstellen lassen, die immer am Ende geöffnet wird und dann von einem Formular die Sachen einträgt. Doch wie kann ich es realisieren dass nach jeder Eintragung ein Zeilenumbruch in der txt Datei gemacht wird?
So. 08.08.2004
20:23 Uhr
#2
Also ich hab das geschafft. mit n.
Aber ich hab noch ein Problem und zwar hab ich vor ein Veranstaltungskalender zu scripten.
Einer bei dem zwar alle Veranstaltungen gespeichert werden, auf einer Seite immer nur die neuesten 3 stk. und auf einer anderen alle ausgegeben werden.
hier mein bisheriger code:
[code:1:fa862cba7c]
$fp = fopen("data.txt", "r"); //öffnet die datei
if ($fp)
{
$zeile = fgets($fp, 100);
echo "$zeile", "<br>"; //gibt 1. Zeile aus
$zeile2 = fgets($fp, 100);
echo "$zeile2"; //gibt 2. aus
[/code:1:fa862cba7c]
(in der der data.txt steht immer:
NAME, DATUM, ORT
NAME2, DATUM2, ORT")
Doch ich hab nun einige Probleme:
Ich hab zwar 2 Zeilen in Variablen gespeichert, doch die data.txt wird ja immer länger und wie mache ich das immer die neusten Veranstaltungen, in dem Fall die letzen 3 Zeilen ausgegeben werden.
So. 08.08.2004
23:47 Uhr
#3
Ich würde das mit der funktion file() machen. Diese Funktion läd eine Datei komplett in ein Array (Feld) wobei in jedam Element eine Zeile steht.
Das würde dann ungefähr so aussehen:
[code:1:727e9136b7]
$allezeilen = file('data.txt'); // liest alle Zeilen aus der Datei in das Array $allezeilen
//die ersten 3 Zeilen ausgeben mit einer for-Schleife
for($i = 0; $i < 3; $i++)
{
echo $allezeilen[$i];
}
//Um alle Zeilen auszugeben gibt es mehrere Möglichkeiten
// 1. mit for-Schleife
$anzahlzeilen = count($allezeilen); // zählen wie viele Zeilen in der Datei waren
for($i = 0; $i < $anzahlzeilen; $i++)
{
echo $allezeilen[$i];
}
// 2. mit foreach-Schleife
foreach($allezeilen as $zeile)
{
echo $zeile;
}
[/code:1:727e9136b7]
Das ganze geht aber auch mit fgets und einer while-Schleife:
[code:1:727e9136b7]
// Alle Zeilen ausgeben
$fp = fopen("data.txt", "r"); //öffnet die datei
if ($fp)
{
while (!feof($fp)) { //solange das Dateiende nicht erreicht ist
$neuezeile = fgets($fp);
echo $neuezeile;
}
[/code:1:727e9136b7]
So. 08.08.2004
23:49 Uhr
#4
Danke, damit hat es geklappt!!!
So. 08.08.2004
23:53 Uhr
#5
Gut - welche Version hast du genommen?
Mo. 09.08.2004
13:41 Uhr
#6
Ich habs mit file() gemacht. Doch ich hab noch ein Problem:)
Und zwar kann ich jetzt Sachen eintragen, doch ich bräuchte noch die Funktion zum bearbeiten und zum löschen.
Zuerst hab ichs mir so gedacht:
[code:1:a1ee240b0d]
if ($gesendet)
{
$datei = $file(data.txt);
$neu = "$name, $ort ($datum, $uhrzeit Uhr) n"
array_pop($datei);
$ausgabe = array_push($datei, "$neu");
$fp = fopen("data.txt", "a");
fputs ($fp, "$ausgabe");
fclose($fp);
exit();
}
?>
<html>
<head>
<title>
Smad Media GmbH - Veranstaltungen
</title>
</head>
<body>
<font face="Verdana" size="2">
<form action="<? PHP_SELF ?>" method="post">
<table border="0">
<tr>
<td>
Name der Veranstaltung:
</td>
<td>
<input size="20" maxlength="30" name="name"><br>
</td>
</tr>
<tr>
<td>
Datum der Veranstaltung:
</td>
<td>
<input size="20" maxlength="10" name="datum">
</td>
</tr>
<tr>
<td>
Uhrzeit der Veranstaltung:
</td>
<td>
<input size="20" maxlength="5" name="uhrzeit">
</td>
</tr>
<tr>
<td>
Ort der Veranstaltung:
</td>
<td>
<input size="20" maxlength="30" name="ort">
</td>
</tr>
</table>
<br>
<input type="submit" value="Senden" name="gesendet">
</form>
</font>
</body>
</html>
[/code:1:a1ee240b0d]
Mo. 09.08.2004
13:44 Uhr
#7
[Anhang]
...doch es kommt immer ein Parse Error, jetzt weiß ich nicht kommt der weil ich irgendein Zeichen vergessen habe, oder weil es so, wie ich will, gar net gehen kann.
Mo. 09.08.2004
16:03 Uhr
#8
Der Parse Error kommt wahrscheinlich weil du in der Zeile
$neu = "$name, $ort ($datum, $uhrzeit Uhr) n"[b:13b3febf16];[/b:13b3febf16]
das Semikolon vergessen hast.
Mo. 09.08.2004
16:31 Uhr
#9
Oh^^ stimmt. Doch jetzt kann ich zwar die Seite angucken und auch was eintragen doch beim versenden kommt folgender Error:
Fatal error: Call to undefined function: () in /srv/www/htdocs/web244/html/bearbeiten.php on line 5
Hast du vielleicht eine andere Idee, wie man das "Bearbeiten" lösen kann?
Mo. 09.08.2004
17:22 Uhr
#10
Zu dem Fehler das könnte kommen wenn du ein $ vor den Funktionsnamen schreibst. PHP versucht dann die Funktion mit dem Namen des Wertes der Variablen aufzurufen.
Das Bearbeiten würde ich so machen, dass du erstmal eine Liste aller Zeilen ausliest und jede Zeile mit einem "editieren" Link versiehst. Der Link sollte die Zeilennummer enthalten also etwa so: bearbeiten.php?zeile=123
In der bearbeiten.php liest du mit der file() Funktion wieder alle Zeilen in einen Array und zeigst anschliessend die Zeile in einem Textfeld bzw. Textarea an ( echo $allezeilen[123] ). Zum speichern wird die geänderte Zeile im Array überschriebn und das ganze Array wieder in die Datei zurückgeschrieben.